我有两个第三方dll文件,都没有强名称。我想在app.config
中引用这些dll文件,以便能够在网络上找到它们,并避免为每个使用它们的应用程序复制多个副本......据我所知,要通过assemblyBinding
在app.config
文件中引用它们,它们必须具备强名称:
<runtime>
<dependentAssembly>
<assemblyIdentity name="External" culture="neutral" publicKeyToken="xxxx"/>
<codeBase version="1.0.0.0" href="FILE://N://Lib/External.dll"/>
</dependentAssembly>
...
所以我需要对它们进行签名。感谢.NET-fu:无需延迟签名即可对未签名程序集进行签名,我使用我的*.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
来加载这些dll,并在代码中手动加载它们,例如使用Assembly.LoadFrom
?