我正在尝试使用Mono和XSP4在我的Linux机器上启动MVC5网站。它适用于没有视图,但是当我尝试渲染它时,它会给我带来错误。
这是我的测试代码。请注意,我没有改变任何东西,这基本上是没有EF或任何其他库的空白站点。只是赤裸裸的MVC5 + Razor。
public ActionResult Index()
{
// return Content("'sall good"); // works
return View();
}
System.InvalidOperationException
找不到Razor Host Factory 类型:System.Web.Mvc.MvcWebRazorHostFactory,System.Web.Mvc, Version = 5.0.0.0,Culture = neutral,PublicKeyToken = 31BF3856AD364E35
描述:HTTP 500.Error处理请求。
详细信息:非Web异常。异常来源(应用程序或对象的名称):System.Web.WebPages.Razor。
堆栈跟踪
at System.Web.WebPages.Razor.WebRazorHostFactory.CreateFactory (System.String typeName) [0x00000] in <filename unknown>:0
at System.Collections.Concurrent.ConcurrentDictionary`2+<GetOrAdd>c__AnonStorey3[System.String,System.Func`1[System.Web.WebPages.Razor.WebRazorHostFactory]].<>m__0 () [0x00000] in <filename unknown>:0
at (wrapper delegate-invoke) System.Func`1<System.Collections.Generic.KeyValuePair`2<string, System.Func`1<System.Web.WebPages.Razor.WebRazorHostFactory>>>:invoke_TResult__this__ ()
...
我尝试将Version = 5.0.0.0更改为4.0.0.0和3.0.0.0等但没有任何效果。我现在仍然得到同样的错误它是关于4.0.0.0。
有希望吗?
答案 0 :(得分:22)
问题出在Web.config
文件夹内/Views
。 system.web.webPages.razor
host
参数必须与MVC版本完全匹配。
例如,如果您有MVC 5.2.2.0,那么它应该看起来像<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
。
答案 1 :(得分:4)
项目的MVC版本必须与MvcWebRazorHostFactory的版本匹配,它必须相同。我必须将版本更改为5.2.3.0
(在Views/Web.config
文件中)。
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0
如果您不知道您在项目中使用的MVC版本,请转到Project - &gt;修改参考 - &gt;然后在右侧,在#34;选择参考文献&#34;向下滚动到System.Web.Mvc
,应该在哪里查看您正在使用的版本。这就是我在Xamarin工作室社区中发现的。
答案 2 :(得分:0)
这个对我有用。
我根据我的Mvc版本更改了Views文件夹中的Web.config,Mvc版本为5.2.3.0。
例如。 <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
我将版本从5.2.0.0更改为5.2.3.0。
答案 3 :(得分:0)
更新软件包并运行代码后,我收到相同的错误。
错误:System.InvalidOperationException 无法找到Razor主机工厂类型:System.Web.Mvc.MvcWebRazorHostFactory,System.Web.Mvc,版本= 5.2.3.0,区域性=中性,PublicKeyToken = 31BF3856AD364E35
在“视图”文件夹下的Web.config文件中更改System.Web.Mvc的更新版本
system.web.webPages.razor
host factoryType =“ System.Web.Mvc.MvcWebRazorHostFactory,System.Web.Mvc,Version = 5.2.7.0,Culture = neutral,PublicKeyToken = 31BF3856AD364E35”
我将System.Web.Mvc的版本从5.2.3.0更改为5.2.7.0,并执行了代码。
答案 4 :(得分:0)
@stan 解决方案帮我解决了这个问题。
我在 Mac M1 芯片上使用 Visual Studio。
就我而言,我在 views/web.config 文件中修复了以下内容
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages validateRequest="false" pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<controls>
<add assembly="System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
</controls>
</pages>
根据参考 > 包更新版本,检查那里的版本,然后更新它。
重建项目/解决方案
答案 5 :(得分:-1)
就像斯坦说的那样。在您的参考文件夹(项目中)中检查System.Web.MVC
做“右键单击&gt;属性”的版本。然后,在/views/web.config
。