gpt4 book ai didi

c# - 我可以更改第三方 dll 中的 dll 引用吗?

转载 作者:太空宇宙 更新时间:2023-11-03 10:44:59 25 4
gpt4 key购买 nike

我有两个第三方 dll,它们都没有强命名。我想在 app.config 中引用这些 dll,以便能够在网络上定位它们一次,并避免为每个使用它们的应用程序复制多次……据我所知,通过以下方式引用它们app.config 文件中的 assemblyBinding 它们应该是强命名的:

<runtime>
<dependentAssembly>
<assemblyIdentity name="External" culture="neutral" publicKeyToken="xxxx"/>
<codeBase version="1.0.0.0" href="FILE://N://Lib/External.dll"/>
</dependentAssembly>
...

所以我需要签名。感谢.NET-fu: Signing an Unsigned Assembly (Without Delay Signing)我设法用我的 *.snk 文件给它们签名:

ildasm /all /out=Bar.il Bar.dll
ilasm /dll /key=Foo.snk Bar.il

然后我将解决方案中的引用替换为已签名的引用,并将 CopyLocaly 设置为 false。之后,我使用新的 publicKeyToken 编辑了 app.config 文件。

但是,在运行我的应用程序时,我仍然得到 FileLoadException,表示加载程序无法找到其中一个具有 publicKeyToken=null 的 dll。

所以我决定这些 dll 中的一个引用另一个,并且该引用明确地不知道关于另一个 dll 的签名版本的任何信息。

问题来了:有没有办法将第一个dll中的引用更改为第二个dll的签名版本?或者我唯一的选择是不对这些 dll 使用 app.config 并在代码中手动加载它们,比如 Assembly.LoadFrom?

最佳答案

最后看起来很简单。在包含对第二个 dll 的引用的 dll 的 *.il 文件中,我通过第二个 dll 的名称找到了以下条目:

.assembly extern /*23000002*/ SecondDllName
{
.ver 1:0:0:0
}

我把它改成了

.assembly extern /*23000002*/ SecondDllName
{
.publickeytoken = (xx xx xx xx xx xx xx xx )
.ver 1:0:0:0
}

即添加了生成的公钥 token 。

然后我用

重新组装了dll
ilasm /dll /key=Foo.snk Bar.il

它奏效了。

关于c# - 我可以更改第三方 dll 中的 dll 引用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23796022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com