程序集参考版本冲突-如何解决?

时间:2018-08-18 21:46:08

标签: c# nuget restsharp csproj

所以我有一个共享的Common库,它是参考RestSharp。我使用NuGet安装RestSharp,因此它是参考版本106.3.1。现在,我将“特定版本”设置为False,从csproj文件引用中删除了版本号,并将“私有”设置为true。

<Reference Include="RestSharp">
  <HintPath>..\packages\RestSharp.106.3.1\lib\net452\RestSharp.dll</HintPath>
  <SpecificVersion>False</SpecificVersion>
  <Private>True</Private>
</Reference>

然后从我的主.NET Framework 4.6.1 Web应用程序中引用此公共库。该Web应用程序反过来引用了NuGet的另一个库,该库对RestSharp 105.1.0.0具有硬版本依赖性。由于依赖于此,因此Web应用程序现在还引用了RestSharp 105.1.0.0。

现在,基于我对csproj汇编的理解,引用了应该的这项工作。没有。运行它时,在运行公共库中的代码(引用RestSharp 106.3.1的代码)时,我在运行时收到此错误:

  

System.IO.FileLoadException:'无法加载文件或程序集'RestSharp,Version = 106.3.1.0,Culture = neutral,PublicKeyToken = 598062e77f915f75'或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (来自HRESULT的异常:0x80131040)'

总而言之,我引用的是与主项目不同的两个项目。这两个项目都依赖RestSharp,但版本不同。我以为上面的csproj更改应该可以解决此问题,但不起作用。

我需要更改什么才能解决此DLL地狱问题?非常感谢您的任何帮助。

更新:我按照建议尝试了绑定重定向,例如:

<dependentAssembly>
     <assemblyIdentity name="RestSharp" publicKeyToken="598062e77f915f75" culture="en-us" />
     <bindingRedirect oldVersion="105.1.0" newVersion="106.3.1.0" />
 </dependentAssembly>

不幸的是,这没有用,因为RestSharp 105.1.0没有publicKeyToken,所以现在我收到一个错误消息,说找不到该库的105.1.0版本。还有其他想法吗?

更新2:试图删除公钥令牌和文化:

  <dependentAssembly>
    <assemblyIdentity name="RestSharp"/>
    <bindingRedirect oldVersion="105.1.0.0" newVersion="106.3.1.0" />
  </dependentAssembly>

这也不起作用,产生了:

  

FileLoadException:无法加载文件或程序集'RestSharp,版本= 105.1.0.0,区域性=中性,PublicKeyToken =空'或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (来自HRESULT的异常:0x80131040)

1 个答案:

答案 0 :(得分:1)

我有同样的问题。

关键是105.1.0的publicKeyToken为null,即使api与106.3.1.0也不同。因此它们不兼容,不能使用bingding重定向。

我建立了一个答案,但我尚未验证它,因为它不能承受任何麻烦。如果您不介意,可以尝试。

<dependentAssembly>
    <assemblyIdentity name="RestSharp" publicKeyToken="null" culture="neutral" />
    <codeBase version="105.1.0.0" href="RestSharp.105.1.0/RestSharp.dll" />
</dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="RestSharp" publicKeyToken="598062e77f915f75" culture="neutral" />
    <codeBase version="106.3.1.0" href="RestSharp.106.3.1/RestSharp.dll" />
</dependentAssembly>