该项目在本地运行良好,仅在发布时我收到以下错误:
无法加载文件或程序集“System.Web.Razor”或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)
花了最后几个小时谷歌搜索问题似乎是我添加到项目中的nuget包引用了剃刀1并覆盖了我的剃刀2 dll。我已经尝试将剃刀2.0.0.0 dll复制到参考而不是1但是错误仍然存在。这是详细构建输出中显示冲突的地方:
“System.Web.Razor,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”和“System.Web.Razor,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”之间存在冲突”。 1 GT;选择“System.Web.Razor,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”,因为它是主要的,“System.Web.Razor,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”不。 1 GT;引用依赖于“System.Web.Razor,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”[C:\ Program Files(x86)\ Microsoft ASP.NET \ ASP.NET Web Pages \ v1.0 \组件\ System.Web.Razor.dll。 1 GT; C:\ Program Files(x86)\ Microsoft ASP.NET \ ASP.NET Web Pages \ v1.0 \ Assemblies \ System.Web.Razor.dll 1 GT;项目文件项包括导致引用“C:\ Program Files(x86)\ Microsoft ASP.NET \ ASP.NET Web Pages \ v1.0 \ Assemblies \ System.Web.Razor.dll”。 1 GT; System.Web.Razor,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35,processorArchitecture = MSIL 1 GT;引用取决于“System.Web.Razor,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”[C:\ Users \ Jack \ SkyDrive \ LessonUp.Current \ packages \ RazorEngine.3.0.8 \ lib \ net40 \ System.Web.Razor.dll。 1 GT; C:\用户\千斤顶\ SkyDrive的\ LessonUp.Current \包\ Microsoft.AspNet.WebPages.2.0.20710.0 \ LIB \ net40 \ System.Web.WebPages.Razor.dll 1 GT;项目文件项包括引起参考“C:\ Users \ Jack \ SkyDrive \ LessonUp.Current \ packages \ Microsoft.AspNet.WebPages.2.0.20710.0 \ lib \ net40 \ System.Web.WebPages.Razor.dll”。 1 GT; System.Web.Mvc,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35,processorArchitecture = MSIL 1 GT;的Recaptcha
从那里继续列出其他包,具体取决于剃刀2。
我添加到项目中的包是:Recaptcha,Recaptcha.mvcModel和Postal。 有谁知道我可以采取哪些步骤来解决这个问题? 如果我能提供更多可能导致解决方案的信息,请告诉我。
答案 0 :(得分:5)
确保引用了2.0 dll并复制local = true,然后尝试在web.config中添加程序集绑定重定向:
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Razor" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
</assemblyBinding?
答案 1 :(得分:1)
我在MVC4项目中遇到了与邮政0.8.0相同的问题。使用NuGet安装Postal时,它会将System.Web.Razor 2.0
替换为System.Web.Razor 1.0
。我必须删除对System.Web.Razor 1.0
的引用,然后再添加回System.Web.Razor 2.0
。您必须在True
的属性中另外将复制本地设置为System.Web.Razor
,然后重建项目。一旦我这样做,VS2012将System.Web.Razor.dll
复制到已部署的bin目录并清除问题。
Postal还将这些依赖项添加到web.config中。我删除它们仍然可以正常工作。
<dependentAssembly>
<assemblyIdentity name="System.Web.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="RazorEngine" publicKeyToken="9ee697374c7e744a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.0.8.0" newVersion="3.0.8.0" />
</dependentAssembly>
答案 2 :(得分:0)
最后得到了这个,从nuget再次下载了razor2.0。似乎对webconfig进行排序并修复依赖性错误。在azure上运行并没有任何问题。
答案 3 :(得分:0)
检查你的项目文件和web.config,看看它们是否被NuGet包所包含。已知问题的孩子是postal 0.8.0。它作为RazorVersion的beta版本的依赖性(即使你已经过滤以仅显示稳定)。即使您将RazorVersion更新为稳定的最新版本,您的项目文件最终会引用System.Web.Razor
版本1,并且您的web.config具有不正确的运行时程序集绑定。
要修复,请在项目文件和web.config上对新的空MVC 4项目进行差异处理。然后从原始项目文件中复制Reference
的{{1}}元素。在web.config中,删除System.Web.Razor
的{{1}}元素。
这是项目文件的TLDD(太懒,没差异)文本。希望在此片段过期时,基本原因将得到修复。
dependentAssembly
(不幸的是,你不能通过卸载和重新安装NuGet来解决这个问题,因为你必须首先卸载违规的依赖包,例如postal,这会在你重新安装时重新破坏它。)< / p>
答案 4 :(得分:0)
原始..
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages.Deployment" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
由于某种原因,newVersion属性设置为2.0.0.0版本,而dll为3.0.0.0
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages.Deployment" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
比它有效