C#引用同一程序集的两个不同版本

时间:2014-06-16 10:10:55

标签: c# .net dll

我需要在我的库项目中引用同一个库(Coherence .NET)的两个版本并使用它们,所以我已经重命名了dll并通过别名在我的项目中引用它们,但是当我尝试编译我的库我得到了这个警告

warning MSB3243: No way to resolve conflict between "Coherence, Version=12.1.2.0, Culture=neutral, PublicKeyToken=0ada89708fdf1f9a" and "Coherence, Version=3.3.0.2, Culture=neutral, PublicKeyToken=0ada89708fdf1f9a". Choosing "Coherence, Version=12.1.2.0, Culture=neutral, PublicKeyToken=0ada89708fdf1f9a" arbitrarily

当我尝试注册我的库(需要使用RegAsm.exe注册)时,我得到了这个erorr

error MSB3217: Cannot register assembly "C:\Program Files\******.dll". Could not load file or assembly 'Coherence, Version=3.3.0.2, Culture=neutral, PublicKeyToken=0ada89708fdf1f9a' or one of its dependencies. The system cannot find the file specified

我引用的两个程序集dll是Coherence.v3.3.dll和Coherence.v12.1.dll

我已经尝试将其添加到我的图书馆的App.config中但是它没有解决问题,因为我仍然得到同样的错误

  <runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Coherence" publicKeyToken="0ada89708fdf1f9a" culture="neutral" />
    <codeBase version="3.3.0.2" href="Coherence.v3.3.dll"/>
    <codeBase version="12.1.2.0" href="Coherence.v12.1.dll"/>
  </dependentAssembly>
</assemblyBinding>
 </runtime>

2 个答案:

答案 0 :(得分:0)

作为变体,您可以创建2&#34;代理&#34;程序集,适用于每个库版本。

答案 1 :(得分:0)

修改项目文件.csproj并确保HintPath存在且SpecificVersion=True

<Reference Include="Coherence, Version=12.1.2.0, ...">
  <HintPath>..\references\******.dll</HintPath>
  <SpecificVersion>True</SpecificVersion>
</Reference>

之后保存文件并再次重建。