升级到 .NET 6 时,Web 项目引发运行时异常

Posted

技术标签:

【中文标题】升级到 .NET 6 时,Web 项目引发运行时异常【英文标题】:When upgrading to .NET 6, Web Project throws runtime exception 【发布时间】:2021-11-10 20:01:32 【问题描述】:

使用现有的 .NET 5 MVC Web 应用程序,我尝试升级到 .NET 6,但遇到此错误。我还在使用 IIS 进行 Windows 身份验证——现在在 .NET 6 中设置为“属性”-> 调试-> 超链接(打开调试启动配置文件 UI)下的“配置文件”。我还包含了更新的“Microsoft.AspNetCore.Authentication.Negotiate”Nuget 包(和相关代码)来处理更新的 Windows 身份验证库。

当网络应用程序启动时,我收到以下错误:

处理请求时发生未处理的异常。

InvalidOperationException:找不到包“System.Security.Cryptography.Pkcs”的编译库位置

Microsoft.Extensions.DependencyModel.CompilationLibrary.ResolveReferencePaths(ICompilationAssemblyResolver 解析器,列出程序集) Microsoft.Extensions.DependencyModel.CompilationLibrary.ResolveReferencePaths() Microsoft.AspNetCore.Mvc.ApplicationParts.AssemblyPartExtensions+c.b__0_0(CompilationLibrary 库) System.Linq.Enumerable+SelectManySingleSelectorIterator.MoveNext()

...

Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext 上下文)

如果我添加列出的包,这不会消失:System.Security.Cryptography.Pkcs

【问题讨论】:

【参考方案1】:

我需要删除至少 1 个 Nuget 包

    Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation -- 我前一秒删除了这个,但在我删除之后它就开始工作了。 Microsoft.Extensions.Hosting -- 我首先删除了这个,但仅此一项并没有解决它。我不知道是否需要删除这个“也”。我假设不是,但我包括在内,以防万一。删除它并没有伤害任何东西。

编辑:作为警告,这将失去 Razor.RuntimeCompilation 赋予的能力。但是,我相信 .NET 6 中的 IIS 和 Razor 似乎存在代码不兼容。

【讨论】:

这确实帮助我解决了类似的问题(我得到了Cannot find compilation library location for package 'Microsoft.Build')。但我没有删除那个包,而是在我的 Startup.cs 中简单地注释掉了 .AddRazorRuntimeCompilation。【参考方案2】:

只有在 docker 容器内运行应用程序 (piranha cms) 时才会出现此错误。 我必须删除 razor 运行时编译才能使其工作。

// comment out or delete this line
// options.AddRazorRuntimeCompilation = true;

【讨论】:

以上是关于升级到 .NET 6 时,Web 项目引发运行时异常的主要内容,如果未能解决你的问题,请参考以下文章

在 WPF 上从 .NET 5 升级到 .NET 6 后开始调试失败

升级到 .net 6 时托管的 Blazor WASM 身份验证中断

纸壳CMS v3.5升级.Net 6免费下载

升级现有.NET Framework 项目到 .NET 6

升级现有.NET Framework 项目到 .NET 6

升级现有.NET Framework 项目到 .NET 6