0

我正在尝试解决在构建服务器上作为我的 .NET 解决方案构建的一部分调用 SGEN 时引发错误的问题。我正在从服务器上的命令行运行构建,以消除 CI 服务器作为一个因素。

提供的具体错误消息是:

SGEN:错误:无法加载文件或程序集“MyAssembly.dll,版本=0.0.0.0,Culture=neutral,PublicKeyToken=56e8273d901d717f”或其依赖项之一。强名称验证失败。(来自 HRESTULT 的异常:0x013141A)

从命令行运行构建脚本不会产生其他错误。

有问题的程序集是延迟签名程序集,使用与指定令牌匹配的公钥构建。

在服务器上,我使用 sn.exe 工具 ( *,56e8273d901d717f) 注册了用于跳过验证的密钥令牌,因为这是在尝试完整签名阶段之前运行构建过程的一些测试步骤所必需的。

构建过程在开发人员桌面和 Win2K3 服务器上成功运行。我在一个新的 Win2k8R2 服务器上运行这些测试,这是为了替换旧的盒子。

4

1 回答 1

1

问题在于 sn.exe 工具。

虽然我已经在服务器上添加了验证跳过条目,但 SGEN 工具并没有看到这个,因为它作为64 位进程运行,而 sn 工具是32 位版本(尽管存在于 64-位“程序文件”文件夹)。

  • 32 位 sn.exe 位于 C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\sn.exe。
  • 64 位 sn.exe 位于 C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\x64\sn.exe

这两个工具写入完全独立的注册表 - 必须根据机器上 .NET 安装的“位”和被调用的 exe 的“位”添加验证。

使用 64 位 sn.exe 注册条目已解决该问题。

于 2012-08-06T14:46:41.040 回答