阻止运行时程序集绑定到旧程序集

时间:2013-07-13 17:28:41

标签: asp.net asp.net-mvc assemblybinding

我有一个包含3个项目的解决方案:

  

Solution.Web.Core - 常用类
  Solution.Web.Mvc - MVC 4
  Solution.Web.Api - Web Api 2也称为运行ASP.NET 5.0(beta-1)程序集

我将WebApi设置为MVC应用程序的子应用程序(在IIS中),但是,我无法实现此项目的完全隔离。

因为Solution.Web.Core有一些对ASP.NET 4.0程序集的引用,如果我在Solution.Web.Api中添加对该项目的引用,我在运行时会得到以下异常:

  

无法加载文件或程序集'System.Net.Http.Formatting,Version = 5.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)

如何防止在Solution.Web.Api中发生此错误,以便我可以引用Solution.Web.Core,尽管 引用旧的ASP.NET程序集版本?

注意:由于错误显示“System.Net.Http.Formatting 或其中一个依赖”我老实说甚至不知道如何找出哪个是确切的违规组件。< / p>

2 个答案:

答案 0 :(得分:2)

更改View部分的Web.Config
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, **Version=5.0.0.0**, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
  <namespaces>

<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, **Version=5.2.3.0**, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
  <namespaces>

答案 1 :(得分:1)

我刚刚开始使用MVC 5 + Web Api 2来解决这个问题。

然而,刚刚发现this blog post answer似乎它可能对我有用:

要允许MVC 4项目与5.0 beta程序集(至少是博客文章中的CORS程序集)一起使用,请将Web配置更改为以下内容:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:bcl="urn:schemas-microsoft-com:bcl">
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" />
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-1.3.0.0" newVersion="1.3.0.0" />
  </dependentAssembly>