C# 我可以在第三方dll中更改dll引用吗?
我有两个第三方DLL,它们都没有很强的名称。我想在C# 我可以在第三方dll中更改dll引用吗?,c#,visual-studio-2010,visual-studio,dll,C#,Visual Studio 2010,Visual Studio,Dll,我有两个第三方DLL,它们都没有很强的名称。我想在app.config中引用这些DLL,以便能够在网络上找到它们一次,并避免为每个使用它们的应用程序复制多次……据我所知,要通过app.config文件中的assemblyBinding引用它们,它们应该被强烈命名为: <runtime> <dependentAssembly> <assemblyIdentity name="External" culture="neutral" publicKeyTok
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>
...
然后,我将解决方案中的引用替换为有符号的引用,并将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
}
i、 e.添加生成的公钥令牌
然后我用
ilasm /dll /key=Foo.snk Bar.il
它成功了
ilasm /dll /key=Foo.snk Bar.il