延迟签署的程序集链

时间:2016-08-12 09:30:23

标签: c# .net mef strongname strong-named-key

我正在开发一个C#.NET程序集(名称:A.exe),需要延迟签名,然后由第三方公司完全签名。为了延迟签名,我使用公钥。 程序集A引用程序集B.Core.dll,B.Common.dll,B.Logging.dll,它们是公共库的一部分。 B组件没有延迟签名,因此我使用ildasm / ilasm对它们进行反汇编并重新组合延迟签名。 我提交了A.exe和B.Core.dll,B.Common.dll,B.Logging.dll,它们现在已完全签名,但是当A启动它时会报错,并显示错误:

无法加载文件或程序集'程序集B1 PublicKeyToken = null'

这个问题不应该与A.exe相关,因为它引用了延迟签名的程序集(它们将Strong Name属性设置为True),但我怀疑罪魁祸首是B.Core。
实际上,B.Core引用了B.Common和B.Logging,而B.Common和B.Logging是相互独立的。
错误的原因可能是B.Core最初是使用非签名的B.Common程序集构建的,然后反汇编并重新组装所有三个程序集都没有更改引用... 为了解决这个问题,我想要做的是将所有四个程序集合并为一个单一的延迟签名程序集作为A的后构建步骤。你认为它会起作用吗?
要记住的一件事是B.Core使用.NET MEF从A动态加载导出的接口。这个过程会出现任何问题吗?

在此先感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案:我设法使用ILMerge将四个程序集合并为一个,因此一切都按预期工作。甚至调试符号也被“合并”到一个PDB文件中(诀窍是将B.Core.pdb,B.Common.pdb和B.Logging.pdb放在相应程序集的同一文件夹中)。

MEF没有抱怨就完成了工作。