延迟签名程序集链
Delay signed assemblies chain
我正在开发一个 C# .NET 程序集(名称:A.exe),它需要延迟签名然后由第三方公司完全签名。为了延迟签名,我使用 public 键。
程序集 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 启动时它抱怨错误:
无法加载文件或程序集 'Assembly B1 PublicKeyToken=null'
这个问题不应该与 A.exe 有关,因为它引用了延迟签名的程序集(它们的强名称 属性 设置为 True),但我怀疑罪魁祸首是 B.Core。
事实上,B.Core 引用 B.Common 和 B.Logging,而 B.Common 和 B.Logging 是相互独立的。
错误的原因可能是 B.Core 最初是使用未签名的 B.Common 程序集构建的,然后拆卸并重新组装所有三个程序集并没有更改引用...
为了解决这个问题,我想做的是将所有四个程序集合并为一个延迟签名的程序集作为 A 的 post 构建步骤。你认为它会起作用吗?
要记住的一件事是 B.Core 使用 .NET MEF 动态加载从 A 导出的接口。这个过程会出现任何问题吗?
预先感谢您的帮助
我找到了一个解决方案:我设法使用 ILMerge 将四个程序集合并为一个,因此一切都按预期进行。甚至调试符号也被 "merged" 放入单个 PDB 文件中(诀窍是将 B.Core.pdb、B.Common.pdb 和 B.Logging.pdb 放在各个程序集的同一文件夹中)。
MEF 毫无怨言地完成了工作。
我正在开发一个 C# .NET 程序集(名称:A.exe),它需要延迟签名然后由第三方公司完全签名。为了延迟签名,我使用 public 键。
程序集 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 启动时它抱怨错误:
无法加载文件或程序集 'Assembly B1 PublicKeyToken=null'
这个问题不应该与 A.exe 有关,因为它引用了延迟签名的程序集(它们的强名称 属性 设置为 True),但我怀疑罪魁祸首是 B.Core。
事实上,B.Core 引用 B.Common 和 B.Logging,而 B.Common 和 B.Logging 是相互独立的。
错误的原因可能是 B.Core 最初是使用未签名的 B.Common 程序集构建的,然后拆卸并重新组装所有三个程序集并没有更改引用...
为了解决这个问题,我想做的是将所有四个程序集合并为一个延迟签名的程序集作为 A 的 post 构建步骤。你认为它会起作用吗?
要记住的一件事是 B.Core 使用 .NET MEF 动态加载从 A 导出的接口。这个过程会出现任何问题吗?
预先感谢您的帮助
我找到了一个解决方案:我设法使用 ILMerge 将四个程序集合并为一个,因此一切都按预期进行。甚至调试符号也被 "merged" 放入单个 PDB 文件中(诀窍是将 B.Core.pdb、B.Common.pdb 和 B.Logging.pdb 放在各个程序集的同一文件夹中)。
MEF 毫无怨言地完成了工作。