.net核心AspnetCore剃刀视图因CompilationFailedException而失败

时间:2018-08-11 20:26:28

标签: c# asp.net razor .net-core kestrel-http-server

当我尝试查看我的Razor页面时,我得到以下信息

 <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>

这是一个令人困惑的消息,因为我的软件包引用在下面并包括      netstandard

 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?}");
        });
    }

我的目标是.netcore 2.1

我的startup.cs是

.env

我已经多次清除并恢复了程序包缓存,并已在VS2017和dotnetcli下复制了此指针,因此不胜感激。我目前的最佳猜测是存在冲突的依赖关系,但是我仍然对.netcore还是陌生的,并且不确定如何调试,感谢任何帮助

2 个答案:

答案 0 :(得分:4)

官方存储库中有an issue,对此主题进行了冗长的讨论。在撰写本文时,该问题仍然悬而未决,但是您似乎可以尝试几种潜在的解决方案。但是,似乎有多个原因(目前尚不确定)导致此问题,因此,我建议您尝试所有这些问题。我将在其中包括其中一些内容,因此,这不是一个仅链接的答案,但我认为完全阅读该问题是明智的。

总结的潜在解决方案

  • 在web.config中引用程序集(因为您已经明确标记了Kestrel,这可能不适用,但是仍然可以尝试)

<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>

注意:

  

在IIS或IIS Express中托管应用程序时,需要一个web.config文件。 web.config中的设置使ASP.NET Core Module能够启动应用程序并配置其他IIS设置和模块。如果不存在web.config文件,并且项目文件包含<Project Sdk="Microsoft.NET.Sdk.Web">,则发布项目将在发布的输出(发布文件夹)中创建一个web.config文件。

Source

  • 将以下内容添加到您的.csproj

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

  • 更新Visual Studio和工具,并尝试创建一个新项目

根据您提出问题的方式,我假设您的项目是全新的,并且可以选择创建一个新项目。

  • global.json更改为dotnet SDK的目标版本2.1.2,而不是2.0.3

  • 安装最新版本的SDK

  • 该线程中还有许多其他解决方案 [ 1 ] [ 2 ] [ 3 ]

希望那里能为您解决问题。

编辑:我注意到您已经致电app.UseMvc()两次。我怀疑它有什么作用,因为我想这些调用只是设置状态,而无需调用两次。

答案 1 :(得分:-1)

您正在使用Razor类库

对于使用其默认项目模板创建针对.netcore2.1的Asp.net mvc应用程序的VS 2017,我没有遇到任何问题。 在解决方案中,如果某些软件包引用的依赖项之间存在版本冲突,则可能会给您带来问题。

使用以下参考文献

<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和您的.netcore2.1 MVC应用程序“ Microsoft.AspNetCore.App”应该没有任何版本冲突,并且也适用于它们的依赖项。

  • “ 2.1.0”是创建Razor类库时VS 2017中的默认版本,它与.netcore2.1 mvc应用程序很好地兼容。

如果您选择的是Mvc软件包的首选版本,请确保具有Server.Kestrel的兼容版本以及.netcore2.1应用程序的引用。