C# 我可以在第三方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

我有两个第三方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>
...
然后,我将解决方案中的引用替换为有符号的引用,并将
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