2013-11-22 44 views
4
一個.NET 4.0組件

RegAsm使用Microsoft.Bcl.Async以下消息組件用於.NET 4.0失敗:RegAsm未能使用Microsoft.Bcl.Async

 
RegAsm : error RA0000 : Could not load file or assembly 
'System.Threading.Tasks, Version=1.5.11.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies.
The located assembly's manifest definition does not match
the assembly reference. (Exception from HRESULT: 0x80131040)

我的組件(MyAssembly.dll)使用了最新的Microsoft.Bcl.Async NuGet包,這裏的項目packages.config

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="Microsoft.Bcl" version="1.1.6" targetFramework="net40" /> 
    <package id="Microsoft.Bcl.Async" version="1.0.165" targetFramework="net40" /> 
    <package id="Microsoft.Bcl.Build" version="1.0.13" targetFramework="net40" /> 
</packages> 

它捆綁System.Threading.Tasks.dll版本:2.6.6.0這是NuGet包的一部分。目標系統上沒有其他System.Threading.Tasks.dll(Win7與.NET 4.0,但沒有.NET 4.5),無論是在GAC還是其他地方。

這裏是MyAssembly.dll.config,它已經正確bindingRedirect元素System.Threading.Tasks

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-2.6.6.0" newVersion="2.6.6.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-2.6.6.0" newVersion="2.6.6.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-2.6.6.0" newVersion="2.6.6.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

我的問題:不RegAsm不使用MyAssembly.dll.config?我如何使其工作,因此它可以解決bindingRedirect說明?

回答

4

我想出瞭解決的辦法是一個黑客:

  • 複製RegAsm.exeRegAsm.exe.configC:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe到本地文件夾,其中MyAssembly.dll是;

  • 編輯RegAsm.exe.config看起來像這樣:

<?xml version ="1.0"?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
     <requiredRuntime safemode="true" imageVersion="v4.0.30319" version="v4.0.30319"/> 
     <supportedRuntime version="v4.0" sku="client" /> 
    </startup> 

    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-2.6.6.0" newVersion="2.6.6.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-2.6.6.0" newVersion="2.6.6.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-2.6.6.0" newVersion="2.6.6.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 

</configuration> 
  • 現在,運行RegAsm.exe /codebase MyAssembly.dll如預期正常工作。

有趣的是,useLegacyV2RuntimeActivationPolicy="true"已先期在標準RegAsm.exe.config,但僅靠它並沒有幫助。

我認爲這是同樣的錯誤報告在這裏:https://connect.microsoft.com/VisualStudio/feedback/details/789318/asyncpack-system-io-fileloadexception-could-not-load-file-or-assembly-system-threading-tasks-version-1-5-11-0

+1

不錯的工作 - 謝謝你。版本號現在是2.6.8.0,但這工作正常。 –