0

我有一个用 C# 编写的 Windows 服务。它动态生成 C# 代码并将它们编译为 abc.dll、xyz.dll 等程序集。这些程序集稍后将被加载以执行。编译时,我将 /keyfile: mykeyfile.snk" 作为编译器选项之一传递给 System.CodeDom.Compiler.CompilerParameters 类。现在的问题:其中一些程序集无法加载,因为强名称验证失败。

我从测试系统获得了生成的程序集,当我使用 sn、exe 检查它们时,我看到大约六分之一的程序集是延迟或测试签名的。运行 sn.exe -v xyz.dll 给我 xyz.dll 是延迟签名或测试签名的程序集。显然它将无法加载。

为什么有些程序集没有正确签名?

4

1 回答 1

0

我能够解决它,为了大家的利益分享它。问题的原因是编译是一个两步过程。编译器首先生成 dll,然后尝试对其进行签名。请参阅http://msdn.microsoft.com/en-us/library/yh7ks237(v=vs.90).aspx

该 dll 仍然存在,并且在尝试加载它之前不会注意到它的测试已签名。我有 1 个符号文件 xyz.snk 被锁定在另一个线程中。

于 2014-03-24T11:11:24.180 回答