SGEN在64位服务器上进行延迟签名

时间:2012-08-06 11:05:55

标签: .net msbuild windows-server-2008-r2 assembly-signing sgen

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

提供的具体错误消息是:

  

SGEN:错误:无法加载文件或程序集'MyAssembly.dll,   Version = 0.0.0.0,Culture = neutral,PublicKeyToken = 56e8273d901d717f'或   其中一个依赖项。强名称验证失败。 (例外   来自HRESTULT:0x013141A)

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

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

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

构建过程在开发人员桌面和Win2K3服务器上成功运行。我正在新的Win2k8R2服务器上运行这些测试,这将取代旧盒子。

1 个答案:

答案 0 :(得分:1)

问题在于sn.exe工具。

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

  • 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安装的“bit-ness”和正在调用的exe的“bit-ness”添加验证。

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