我正在创建一个新的MVC 4网站,我想使用Unity.MVC3库与MVC中内置的DependencyResolver集成。
我还想从较旧的,更大的项目中引用一些数据访问DLL。
我的问题是Unity.MVC3和较旧的DLL分别针对不同版本的Unity,1.2.0.0和2.1.505.0进行编译。我尝试在我的web.config文件中创建绑定重定向,如下所示:
<dependentAssembly>
<assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersions="1.2.0.0-2.1.505.0" newVersion="2.1.505.0" />
</dependentAssembly>
但是,我仍然会收到以下错误:
Could not load file or assembly 'Microsoft.Practices.Unity, Version=1.2.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)
我打开了程序集绑定日志记录,最后两行说明了:
WRN: Comparing the assembly name resulted in the mismatch: Major Version
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.
为什么我的绑定重定向不受尊重?有没有办法覆盖它对主要版本冲突的检查?
答案 0 :(得分:2)
密钥令牌中有拼写错误:
<assemblyIdentity name="Microsoft.Practices.Unity"
publicKeyToken="31bf856ad364e35" />
应该是:
<assemblyIdentity name="Microsoft.Practices.Unity"
publicKeyToken="31bf3856ad364e35" />
绑定重定向does not complain in case of typos,它什么都不做。
我已经制作了一个测试应用程序,使用这种配置:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.2.0.0" newVersion="2.1.505.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
注意xmlns
,没有它,它会无声地失败。