【问题标题】:The type or namespace name 'Mvc' does not exist in the namespace 'System.Web' .NET MVC 5 to .NET Core 3.1 MVC Migration命名空间“System.Web”中不存在类型或命名空间名称“Mvc”。NET MVC 5 到 .NET Core 3.1 MVC 迁移
【发布时间】:2020-01-17 20:21:27
【问题描述】:

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

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

错误发生在我设置模型的“视图 -> 共享 -> Error.cshtml”视图中。

@model System.Web.Mvc.HandleErrorInfo

@{
    ViewBag.Title = "Error"
}

<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>

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

也许错误处理已从 .NET Core 中的 Mvc 包中移出,这是我的最佳猜测。

【问题讨论】:

  • 您是否尝试将其更改为using Microsoft.AspNetCore.Mvc;?

标签: asp.net-core asp.net-mvc-5 asp.net-core-3.1


【解决方案1】:

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

ASP.NET Core 中的错误处理

也就是说,就错误处理而言,该方法与 ASP.NET Framework 相比发生了很大变化,HandleErrorInfo 类不再存在。有关新方法的更多信息,请参阅Handle errors in ASP.NET Core。例如,您现在可以使用 IExceptionHandlerPathFeature 的实现,而不是使用 HandleErrorInfo 类来检索有关异常的信息——尽管文档中介绍的内容不止于此。

迁移计划

最终,这只是您在迁移到 ASP.NET Core 时可能遇到的众多差异中的第一个。鉴于此,我建议阅读 Microsoft 的 Migrate from ASP.NET to ASP.NET Core 指南,该指南提供了有用的总结,说明了哪些变化以及如何进行迁移。

参考项目

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

最后的想法

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

确实,.NET Core 3.x 比以前的版本要容易很多,因为微软已经做了很多 > 在过去四年中缩小 .NET Framework 和 .NET Core 之间的功能对等差距。而且,一旦您完成了迁移,我想您会发现您的新网站更加干净且易于维护。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    • 2018-06-25
    相关资源
    最近更新 更多