尝试引用较新版本的System.Web.WebPages.Razor的MVC4应用程序的问题

wme*_*lon 8 c# asp.net asp.net-mvc razor asp.net-mvc-4

过去几个月我一直在研究mvc4网络应用程序.直到星期五,当我在nuget中运行更新包以确保我拥有最新版本的库时,一切都运行良好.

现在,当我尝试查看应用程序中的任何内容时,它会告诉我它会收到错误 Could not load file or assembly 'System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

我已经检查了我的web.config和我的packages.config,而且我没有参考 System.Web.WebPages.Razor, Version=3.0.0.0

我在我的web.config中添加了一个dependentAssembly块,版本为2.0.0.0

<dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)

并确保我的views目录中的web.config也指定v2.0.0.0

<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
Run Code Online (Sandbox Code Playgroud)

我还确保我的引用中引用的版本是2.0.0.0.我试过删除它并读取它.我已经尝试确保服务器安装了最新版本的.net框架.

我已经在服务器和本地测试了这个,并得到相同的错误消息.

在本地我在错误日志中看到这个LOG: Post-policy reference: System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 但是我找不到任何导致这种情况的信息.

我正在使用Visual Studio 2012 premium开发它.

有人有主意吗?

Chr*_*att 12

我已经检查了我的web.config和我的packages.config,并且我在哪里引用System.Web.WebPages.Razor,Version = 3.0.0.0

那是你的问题.我自己曾经遇到过类似的问题.但是,它往往主要发生在一个解决方案中处理多个项目时; 我不确定这是否适用于您的情况.尽管如此,问题归结为实际项目引用已被"升级",但您的web.config和packages.config 没有引用该升级包.如果你进入你的项目参考并查看Razor参考的属性,我会打赌美元在那里说3.0.0.0.您可以删除引用并通过浏览较低版本化软件包的bin目录重新添加它,也可以完全升级它.

就像我说的,当你升级一个项目而不是另一个项目时,这通常发生在多项目解决方案中.解决这个问题的最简单方法是管理整个解决方案的nuget包.然后,您可能会看到Razor的多个列表,其中一个项目被检查一个或多个项目但不是一些项目,反之亦然.删除旧版本的旧版Razor(取消选中相关项目)并应用.然后返回新版Razor并将其应用于所缺少的所有项目.