剃刀主机工厂错误

37

我尝试运行我的应用程序时出现了MvcWebRazorHostFactory错误,但它根本不是MVC应用程序。 我通过NuGet安装了以下Web包:

Microsoft ASP.NET Razor
Microsoft ASP.NET Web API 2.1
Microsoft ASP.NET Web Pages

我的应用程序是使用razor视图(.cshtml)的angularjs前端。我不明白为什么我一直收到这个错误。

An exception of type 'System.InvalidOperationException' occurred in System.Web.WebPages.Razor.dll but was not handled in user code

Additional information: Could not locate Razor Host Factory type: System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35

以下是我的web.config文件中的剃刀部分:

<system.web.webPages.razor>
<host factoryType="System.Web.WebPages.Razor.WebRazorHostFactory, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.WebPages.WebPage">
  <namespaces>
    <add namespace="System.Web.Configuration" />
    <add namespace="System.Web.Optimization" />
    <add namespace="System.Web.Routing" />
  </namespaces>
</pages>

:空段落标签。
9个回答

46

通过将 System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc 的版本设置为 5.2.0.0,我解决了这个问题,并且它最终起作用了!为什么是 5.2.0.0因为 NuGet Microsoft ASP.NET 项目的版本相同。

因此,在 /Views/Web.Config 中的该行应为:

<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

这对我不起作用。出现“无法找到Razor主机工厂类型:System.Web.Mvc.MvcWebRazorHostFactory,System.Web.Mvc,Version = 5.2.0.0,Culture = neutral,PublicKeyToken = 31BF3856AD364E35”的错误。 - th1rdey3
4
好的,结果显示NuGet Microsoft ASP.NET版本现在是5.2.2.0。将该版本更改为5.2.2.0后,它可以正常工作。 - th1rdey3
4
将版本设置为正在使用的 System.Web.Mvc 版本。 - robor
1
这是在 /Views 目录内的 Web.config 文件中,对吗? - tedi
现在是:<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> - Matt W
3
这是最好的答案,主要是因为其中的“为什么”部分。 只需检查您的AspNet.Mvc软件包版本,使用该版本即可使其正常工作。 - AlexCode

16

许多答案指向了正确的方向,但我不确定在Microsoft Visual Studio for Mac界面中哪里可以找到适用于factoryType属性版本部分的适当版本号。

为了其他VS for Mac用户的好处,答案是简单地右键单击解决方案资源管理器中“Microsoft.AspNet.Mvc”包的Packages列表。

version number display

在我的情况下,经过软件包更新,包版本为“5.2.6”,因此我将factoryType属性的版本部分设置为Version=5.2.6.0。这解决了问题。


15

针对在OSX上使用Xamarin Studio v5.5.3开发ASP.NET MVC 5网页应用程序的开发人员,删除/Views/Web.config并不能解决问题,反而会导致其他错误。

解决方法是打开/Views/Web.config文件,并将所有5.2.0.0替换为5.2.2.0。

更多详情请参考此处


3
谢谢!在Monodevelop上将“3.0.0.0”更改为“5.2.2.0”可以解决问题。 - Salil

4

我将MvcWebRazorHostFactory的版本更改为与System.Web.Mvc相同的版本,解决了我的问题。


3

显然,我从NuGet获取的某个包将web.config添加到了Views文件夹中。 在这个web.config文件中,有关于MvcWebRazorHostFactory的设置。 我认为当我使用对话框向项目添加视图时发生了这种情况。

解决方法是从Views文件夹中删除web.config文件。


你能详细解释一下吗?我遇到了同样的问题。你从你的 Views/web.config 文件中删除了一些行吗?你改变了版本号吗?谢谢! - Francisc0
我完全删除了它。 - Ryan Langton

2

我在进行一些NuGet包管理/升级后,在我的Razor .cshtml页面中出现了这个错误。

我不想完全从Views文件夹中删除Web.config文件,因为我已经使用一些<add namespace="..." />元素对其进行了自定义。但我注意到<host factoryType="..." />中的Version=...与我的System.Web.Mvc版本不匹配(在Object Browser中检查版本)。

将此版本号更改为与我的System.Web.Mvc程序集的版本匹配,并重新启动Visual Studio,这样就解决了我的问题(如Daniel所建议的那样)。


1
今天我遇到了这个问题。我只是确保views文件夹中的web.config版本号与解决方案中的web.config版本号相匹配。
希望这可以帮助您。

1

对于使用Visual Studio 2019的MacBook用户,您只需进入Web.config文件并将System.Web.Mvc的版本更新为您Nuget packages文件夹中的版本。


0
在您的Web项目中,打开“引用”树节点。 寻找“程序集”文件夹并打开它。 查找 System.Web.Mvc,右键单击它并选择 "属性"。 对话框将提示,仔细阅读包的完整名称字段并查找版本号。例如,我有这一个: System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 因此,在 Web.config(位于 Views 文件夹中)中替换版本号! 在我的情况下,它最初是: 现在我有(看版本值):

<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

希望能有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接