将 .net DLL 与损坏的引用一起使用



我必须在我的应用程序中使用DLL作为API(C#,.NET 4.5(。我可以正常引用 DLL。完全没有错误。但是,如果我想使用此DLL的任何类,则会出现以下编译错误:

错误 CS1705 程序集"Assembly_X",标识为"Assembly_X, 版本=12.3.0.0,区域性=中性,公钥令牌=c878e80841e75d00' 使用 'Assembly_YY, 版本=65535.65535.65535.65535, 区域性=中性, 公钥令牌=c878e80841e75d00' 的版本高于 引用了标识为"Assembly_YY"的程序集"Assembly_YY", 版本=12.3.0.0,区域性=中性,公钥令牌=c878e80841e75d00'

然后我在ILSpy中检查了DLL(Assembly_X(。该Assembly_X有两个对Assembly_YY的引用:一个版本为 12.3.0.0,另一个版本为 65535.65535.65535.65535。

我在应用程序配置中尝试了"绑定重定向"。但是由于错误发生在编译时,这无济于事。

我没有Assembly_X或Assembly_YY的源代码。

如何使用此 DLL 或修复它?


更新

dll 的开发人员终于回应了我的求助电话。他们知道的唯一解决方法是使用Visual Studio 2013而不是Visual Studio 2015或2017。似乎VS 2013根本不被这些双重引用所困扰。

他们写道,错误是由dll的加密工具创建的。 谢谢大家的想法和帮助。

看起来第一个 DLL 引用的库比您使用的其他 DLL 版本更高。

所以你有3个DLL需要考虑:A,B和Bv2

您的项目引用了 A 和 B 但是A引用了Bv2(B的更新版本( 因此,当您使用A的函数时,它会抛出错误,因为它找到B而不是Bv2。

问题基本上是您引用的"Assembly_X"引用程序集"Assembly_YY"版本 12.3.0.0 和 65535.65535.65535.65535.65535,并且您在应用程序中仅引用了"Assembly_YY"版本 12.3.0.0,而没有引用 65535.65535.65535.65535

现在,根据Microsoft Docs上的问题解释,以及您没有程序集源代码

的示例,您必须:将 DLL 的"Assembly_YY"版本 65535.65535.65535.65535 的引用添加到应用程序 若要使其编译并使应用程序能够运行,可以提供包含<dependentAssembly>元素的应用程序配置文件,该元素使用<assemblyIdentity><codeBase>子元素来指定 DLL 版本 12.3.0.0 的位置。

您引用的 DLL 版本高于当前版本。 您需要添加对更高版本程序集的引用:

'Assembly_YY, Version=65535.65535.65535.65535, Culture=neutral, PublicKeyToken=c878e80841e75d00' 

为了解决这个问题。

现在你正在引用

'Assembly_X' with identity 'Assembly_X, Version=12.3.0.0, Culture=neutral, PublicKeyToken=c878e80841e75d0

如果这是可下载的库,请在 nuget 包管理器中搜索它并下载它。 如果它是你编写的库,请获取最新版本的库并将其添加到你的项目中。

最新更新