使用带有损坏引用的.net DLL

时间:2017-08-15 12:10:05

标签: c# .net dll

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

  

错误CS1705使用标识'Assembly_X汇编'Assembly_X',   Version = 12.3.0.0,Culture = neutral,PublicKeyToken = c878e80841e75d00'   使用'Assembly_YY,Version = 65535.65535.65535.65535,Culture = neutral,   PublicKeyToken = c878e80841e75d00'的版本高于   引用程序集'Assembly_YY',标识为'Assembly_YY,   Version = 12.3.0.0,Culture = neutral,PublicKeyToken = c878e80841e75d00'

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

我在App.config中尝试了“bindingRedirect”。但是由于在编译期间发生错误,这无济于事。

我没有Assembly_X或Assembly_YY的源代码。

如何使用此DLL或修复它?

更新

dll的开发者终于回应了我的求助电话。他们所知道的唯一工作是使用Visual Studio 2013而不是Visual Studio 2015或2017.看起来VS 2013并没有受到这些双重引用的困扰。

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

3 个答案:

答案 0 :(得分:3)

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

因此您需要考虑3个DLL:A,B& BV2

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

答案 1 :(得分:2)

问题基本上是你引用'Assembly_X'引用程序集'Assembly_YY'版本12.3.0.0和65535.65535.65535.65535而你在你的应用程序中只引用'Assembly_YY'版本12.3.0.0并且没有引用65535.65535.65535.65535 < / p>

现在根据Microsoft Docs上的问题说明,以及您没有必须使用的程序集源代码的示例:

向您的应用程序添加对DLL的'Assembly_YY'版本65535.65535.65535.65535的引用以使其编译并使应用程序能够运行,您可以提供包含<dependentAssembly>元素的应用程序配置文件<assemblyIdentity><codeBase>个子元素,用于指定DLL版本12.3.0.0的位置。

答案 2 :(得分:0)

您正在引用更高版本的DLL,而不是您当前拥有的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包管理器中搜索并下载它。 如果它是您编写的库,请获取该库的最新版本并将其添加到您的项目中。