命名空间“System.Web”中不存在类型或命名空间名称“Mvc”.NET MVC 5 到 .NET Core 3.1 MVC 迁移

Per*_*y22 5 asp.net-mvc-5 asp.net-core asp.net-core-3.1

我几乎完成了从 ASP.NET MVC 5 到 .NET Core 3.1 的迁移,但收到此错误,

\n
\n

类型或命名空间名称“Mvc”在命名空间“System.Web”中不存在(是否缺少汇编引用?)。

\n
\n

在我看来,错误发生在/Views/Shared/Error.cshtml我正在设置模型的地方。

\n
@model System.Web.Mvc.HandleErrorInfo\n\n@{\n    ViewBag.Title = "Error"\n}\n\n<h1 class="text-danger">Error.</h1>\n<h2 class="text-danger">An error occurred while processing your request.</h2>\n
Run Code Online (Sandbox Code Playgroud)\n

我已删除所有 AspNetCore 包并重新添加它们,并且尝试重新启动我的 Visual Studio (VS19),但均无济于事。

\n

也许错误处理已从 .NET Core 中的 MVC 包中移出?那\xe2\x80\x99是我最好的猜测。

\n

Jer*_*ney 5

ASP.NET Core 3.1中, MVC 应用程序的主命名空间是Microsoft.AspNetCore.Mvc. 尝试使用它代替System.Web.Mvc.

\n

ASP.NET Core 中的错误处理

\n

也就是说,就特别是错误处理而言,该方法与ASP.NET Framework相比发生了很大变化,并且该类HandleErrorInfo已不存在。有关新方法的更多信息,请参阅处理 ASP.NET Core 中的错误。例如,您现在使用\xe2\x80\x94HandleErrorInfo的实现,而不是使用IExceptionHandlerPathFeature该类来检索有关异常的信息,尽管它的作用比文档中介绍的要多一些。

\n

迁移计划

\n

最终,这只是迁移到ASP.NET Core时可能遇到的许多差异中的第一个。鉴于此,我建议阅读 Microsoft 的从 ASP.NET 迁移到 ASP.NET Core指南,该指南提供了有关更改内容以及如何进行迁移的有用摘要。

\n

参考项目

\n

此外,假设您使用的是Visual Studio,我建议创建一个新的ASP.NET Core Web 应用程序项目,它将创建一个基本的ASP.NET Core 3.1 MVC 应用程序。这对于执行迁移时的参考非常有用,因为它确定了“教科书”实现应该是什么样子,并让您了解发生了什么变化以及如何在新框架中解决类似问题。

\n

最后的想法

\n

最终, ASP.NET Core中的许多更改只是添加对正确NuGet包的引用、更新命名空间,以及在少数情况下更新代码以匹配类签名中的更改。尽管如此,仍然存在许多旧方法(以及支持它们的类)不再存在的领域\xe2\x80\x94,就像这里的情况\xe2\x80\x94一样,因此需要额外的思考和关心。

\n

积极的一面是,使用.NET Core 3.x比使用以前的版本要容易得多,因为 Microsoft在过去四年中为缩小 .NET Framework.NET Core之间的功能对等差距做了很多工作。而且,一旦您完成迁移,我想您会发现您的新网站更加干净且更易于维护。

\n