C# 使用不同的publicKeyToken升级引用.Net dll

C# 使用不同的publicKeyToken升级引用.Net dll,c#,.net,configuration,.net-assembly,C#,.net,Configuration,.net Assembly,我必须在我的项目中使用一些引用程序集XXXXX的dll文件。现在,我的项目中有了此程序集的更新版本,但是当我运行项目时,出现错误:无法加载文件或程序集XXXXX,version=XXXXX。我试图用计算机解决这个问题。但这没有帮助。重定向程序集似乎不起作用,因为我有不同的公共令牌密钥。它在旧程序集中为null。但它在较新的程序集中有一些值“xxxxxxxxxx”。如何解决这个问题 另外,类似的问题也存在。但不同之处在于我有不同的公共令牌密钥。您需要获得新版本的dll文件,该文件是针对新版本的XX

我必须在我的项目中使用一些引用程序集XXXXX的dll文件。现在,我的项目中有了此程序集的更新版本,但是当我运行项目时,出现错误:
无法加载文件或程序集XXXXX,version=XXXXX
。我试图用计算机解决这个问题。但这没有帮助。重定向程序集似乎不起作用,因为我有不同的公共令牌密钥。它在旧程序集中为
null
。但它在较新的程序集中有一些值“xxxxxxxxxx”。如何解决这个问题


另外,类似的问题也存在。但不同之处在于我有不同的公共令牌密钥。

您需要获得新版本的dll文件,该文件是针对新版本的XXXXX构建的


您可以在中了解有关程序集查找的更多信息。

共享dll中的公钥应保护应用程序免受“中间的man/dll”攻击

如果当前sub.dll的公钥与编译main.exe时的公钥不同,则dot net运行时会正确拒绝使用sub.dll启动main.exe

要解决这个问题,你可以

  • 使用新的sub.dll重新编译main.exe
  • 让舒尔确保sub.dll的两个版本都使用相同的公钥编译。在您的情况下,您可以从sub.dll中删除公钥(即使用),因为旧的sub.dll没有密钥

1)我无法重新编译,也无法避免在dll文件中使用2个不同的引用。有两个第三方dll文件引用某些dll的不同版本。2) 当我从sub.dll中删除公钥时,出现错误:“无法加载文件或程序集“XXXXX”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(HRESULT中的异常:0x8013100)“此dll的新版本以及新引用不可用。您运气不好。您可能可以使用中所述的ildasm和ilasm构建自己的程序集版本,其中引用XXXXX的过期引用引用了新版本。但这是一项相当低级的任务。我假定您需要重建的程序集没有签名,因为它引用了未签名版本的XXXXXX。顺便说一句,您可以同时拥有XXXXX程序集的两个版本吗?不,我不能同时拥有两个版本。。。但你之前对ildasm的评论对我有帮助。我使用ildasm从dll进行转储。然后我更改了il文件中的引用,并使用ilasm编译它们。所以,我会把你的答案标记为正确。