4 votes

Les vues AspnetCore Razor du noyau .net échouent avec CompilationFailedException

Lorsque j'essaie d'afficher mes pages Razor, j'obtiens le résultat suivant

fail: Microsoft.AspNetCore.Server.Kestrel[13]
  Connection id "0HLFVN3H0G8MT", Request id "0HLFVN3H0G8MT:00000001": An    unhandled exception was thrown by the application.
Microsoft.AspNetCore.Mvc.Razor.Compilation.CompilationFailedException: One or more compilation failures occurred:
jhhodq42.4nm(4,41): error CS0234: The type or namespace name 'Razor' does not exist in the namespace 'Microsoft.AspNetCore' (are you missing an assembly reference?)
jhhodq42.4nm(5,62): error CS0012: The type 'Attribute' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.

Ce message est déroutant car les références de mon paquet sont ci-dessous et comprennent netstandard

 <ItemGroup>   
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.1.1" />      
    <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="2.1.2" />      
    <PackageReference Include="Microsoft.Extensions.Logging" Version="2.1.1" />      
    <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="2.1.1" />      
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="2.1.1" />      
    <PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="2.1.1" />      
    <PackageReference Include="NETStandard.Library" Version="2.0.3" />      
    <PackageReference Include="Newtonsoft.json" Version="11.0.2" />      
  </ItemGroup>

Je vise la version 2.1 de .netcore.

mon startup.cs est

 public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, 
                          ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole();
        loggerFactory.AddDebug();

        app.UseMvc();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }

J'ai effacé et restauré le cache des paquets à plusieurs reprises et j'ai reproduit ce problème sous VS2017 et sous dotnetcli. Je pense qu'il y a un conflit de dépendances, mais je suis encore novice en .netcore et je ne sais pas comment déboguer.

4voto

John H Points 4556

Il y a un problème sur le dépôt officiel qui contient une longue discussion sur ce sujet. Au moment de la rédaction de cet article, ce problème est toujours ouvert, mais il semble y avoir plusieurs solutions potentielles que vous pouvez essayer. Cependant, il semble que les causes de ce problème soient multiples et actuellement mal définies. Je vous encourage donc à les essayer toutes. Je vais inclure certains de ces éléments ici, de sorte que ce ne soit pas une réponse uniquement basée sur des liens, mais je pense qu'il serait sage de lire ce problème dans son intégralité.

Résumé des solutions potentielles

  • Référencez l'assemblage dans le web.config (comme vous avez explicitement marqué Kestrel, cela ne s'appliquera probablement pas, mais essayez quand même).

<system.web> <compilation debug="true" targetFramework="4.7.1" > <assemblies> <add assembly="netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51"/> </assemblies> </compilation> <httpRuntime targetFramework="4.7.1" /> </system.web>

Note :

Un fichier web.config est nécessaire pour héberger l'application dans IIS ou IIS Express. Les paramètres du fichier web.config permettent à l'application Module ASP.NET Core pour lancer l'application et configurer d'autres paramètres et modules IIS. Si le fichier web.config n'est pas présent et que le fichier du projet inclut <Project Sdk="Microsoft.NET.Sdk.Web"> la publication du projet crée un fichier web.config dans la sortie publiée (le dossier de publication).

Source :

  • Ajoutez les éléments suivants à votre .csproj .

<ItemGroup> <Reference Include="netstandard" /> </ItemGroup>

  • Mettez à jour Visual Studio, et les outils, et essayez de créer un nouveau projet.

D'après la façon dont votre question est formulée, j'ai supposé que votre projet est tout nouveau, et que la création d'un nouveau projet est une option.

  • Changement global.json à la version cible 2.1.2 du kit SDK dotnet, au lieu de 2.0.3 .

  • Installez la dernière version du SDK

  • Il existe un certain nombre d'autres solutions dans ce fil de discussion. [ 1 ] [ 2 ] [ 3 ]

J'espère que quelque chose y résoudra le problème pour vous.

Edit : Je remarque que vous avez fait deux appels à app.UseMvc() . Je doute que cela ait quelque chose à voir, car j'imagine que ces appels ne font que définir l'état, mais il n'y a pas besoin de l'appeler deux fois.

-1voto

fedcbaeln Points 19

Utilisez-vous la bibliothèque de classe Razor

Je ne rencontre aucun problème avec VS 2017, pour créer une application Asp.net mvc ciblant .netcore2.1 en utilisant son modèle de projet par défaut. certaines références de paquet peuvent vous poser des problèmes si leurs dépendances ont des conflits de version entre elles, dans votre solution.

utilisez la référence ci-dessous,

<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.1.0" />
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="2.1.0" />

Microsoft.AspNetCore.Mvc, Microsoft.AspNetCore.Server.Kestrel et votre application MVC .netcore2.1 "Microsoft.AspNetCore.App" ne devraient pas avoir de conflit de version et cela s'applique également à leurs dépendances.

  • "2.1.0" est la version par défaut dans VS 2017 lors de la création de la bibliothèque de classes Razor et elle fonctionne bien avec les applications .netcore2.1 mvc.

si vous choisissez la version préférée du paquet Mvc, assurez-vous d'avoir des versions compatibles de Server.Kestrel et des références de l'application .netcore2.1.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X