升级到 .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 后开始调试失败