汇编绑定-使用错误版本的Unity,但为什么

本文关键字:Unity 为什么 版本 错误 绑定 汇编 | 更新日期: 2023-09-27 18:26:00

在这个Selenium测试项目中,我直接引用了Unity 3.0.0.0。

我参考了Unity的2.505.0.2的其他DLL。

我的app.config:中有这个

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Practices.ServiceLocation" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="1.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="AutoMapper" publicKeyToken="be96cd2c38ef1005" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.2.1.0" newVersion="3.2.1.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

我原以为它会使用Unity的V3,但它一直在尝试使用旧版本。绑定日志为:

Assembly manager loaded from:  C:'Windows'Microsoft.NET'Framework'v4.0.30319'clr.dll
Running under executable  C:'PROGRAM FILES (X86)'MICROSOFT VISUAL STUDIO 11.0'COMMON7'IDE'COMMONEXTENSIONS'MICROSOFT'TESTWINDOW'vstest.executionengine.x86.exe
--- A detailed error log follows. 
=== Pre-bind state information ===
LOG: User = INT'UKTHJHAR
LOG: DisplayName = Microsoft.Practices.Unity, Version=2.1.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
 (Fully-specified)
LOG: Appbase = file:///C:/Audatex/Retail/Development/Server/AudaRetailAdministration.AutomatedUITests/bin/Debug
LOG: Initial PrivatePath = NULL
Calling assembly : AudaRetailAdministration.AutomatedUITests, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:'Audatex'Retail'Development'Server'AudaRetailAdministration.AutomatedUITests'bin'Debug'AudaRetailAdministration.AutomatedUITests.dll.config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:'Windows'Microsoft.NET'Framework'v4.0.30319'config'machine.config.
LOG: Post-policy reference: Microsoft.Practices.Unity, Version=2.1.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
LOG: Attempting download of new URL file:///C:/Audatex/Retail/Development/Server/AudaRetailAdministration.AutomatedUITests/bin/Debug/Microsoft.Practices.Unity.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Major Version
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

汇编绑定-使用错误版本的Unity,但为什么

我认为程序集绑定仅适用于直接引用。

可能是为了防止在单个应用程序中使用同一程序集的不同版本(或者应用程序域?)

如果使用与应用程序引用的组件的其他程序集版本一起编译的组件,则加载该组件将失败。

如果你对引用旧版本Unity的程序集进行反编译,你会发现Unity版本在程序集元数据中以某种方式进行了硬编码。

这篇文章也有同样的问题为什么程序集绑定重定向在我的网站中不起作用?

我确实通过在应用程序及其组件中使用相同的程序集版本解决了这个问题。这对你来说可能不可能。

这个问题是使用GAC发布的复杂应用程序的一个缺点。现在,人们倾向于使用金块包来轻松管理组件依赖关系。