下面这个blog post 详细说明了具体步骤
设置密钥文件
使用项目属性中的 Visual Studio“签名”选项卡创建受密码保护的私钥/公钥对 (KeyPair.pfx)
从密钥对中提取公钥并将其复制到单独的文件 (Key.snk)
sn.exe -p KeyPair.pfx Key.snk
将 KeyPair.pfx 复制到您的构建服务器。我使用 C:\Program Files\MSBuild\KeyFile.pfx,因为它可以通过 $(MSBuildExtensionsPath) MSBuild 属性访问。
将 KeyPair.pfx 文件移动到安全可靠的位置。密码也要保密。
将 Key.snk 复制到开发人员可以访问的共享位置。
为签名设置项目
对于您要签名的每个程序集:
- 打开项目属性 |签名页
- 选中 [X] 对程序集签名复选框。
- 选中 [X] 仅延迟符号复选框。
- 从密钥文件下拉列表中选择。
- 浏览到共享位置并选择 Key.snk 文件
- snk 文件将被复制到您分配给它的每个项目目录中
- 将密钥文件从您的一个项目复制到解决方案项中,以便您可以将其用于测试运行配置
为重新签名设置测试运行配置
如果您想检测您的程序集并为您的单元测试启用代码覆盖率,那么您需要指定一个用于重新签名的密钥文件。
打开 LocalTestRun.testrunconfig 文件
在代码覆盖率选项卡上,选择密钥作为重新签名密钥文件
在开发者工作站上禁用强名称验证
由于您仅使用公钥进行延迟签名,因此 .NET CLR 程序集验证将因本地构建的程序集而失败。如果验证失败,您将无法运行或调试程序集。
要在开发中克服这个问题,您需要对本地构建的程序集禁用强名称验证,并使用您的公钥延迟签名。
打开 Visual Studio 命令提示符
类型:
sn.exe -tp Key.snk
这将输出一些数据,包括令牌。
类型:
sn -Vr *,YOUR_KEY_TOKEN
例如:sn -Vr *,0123456789abcdef
这将对使用您的公钥签名的所有程序集禁用强名称验证。
您可以使用以下命令列出强名称验证的当前设置:
sn -Vl
为 Team Build 安装私钥
由于私钥 (Key.pfx) 受密码保护 - Team Build 无法访问它。感谢Nagaraju Palla’s Blog: Using Password Protected Signing Keys in Team Build,我们有了解决方案。
作为构建服务帐户登录到 Team Build 服务器
在 Visual Studio 中打开项目
在 Visual Studio 中构建项目
系统将提示您输入私钥文件的密码。
输入密码
关闭 Visual Studio 并注销
私钥文件现在安装在构建服务帐户的本地证书存储中,Team Build 可以访问它而无需再次提示输入密码。此证书存储与构建服务帐户的密码一样安全。 (提示:使其与密钥文件的密码一样强大)
更新 TFSBuild.proj 构建脚本
Team Build 可以访问私钥文件和密码。这允许它对程序集进行完全签名。
要覆盖项目设置并指示 Team Build 使用私钥文件并禁用部分签名,我们需要在 TFSBuild.proj 中设置 CustomPropertiesForBuild 属性
检查您的 TFSBuild.proj 构建脚本
搜索占位符属性(默认在第 130 行附近)
将其替换为以下内容:
SignAssembly=true;DelaySign=false;AssemblyOriginatorKeyFile=$(MSBuildExtensionsPath)\Key.pfx
签入您的更改
排队构建
验证 Team Build 输出
要检查 Team Build 是否正确地为您的程序集强命名,您可以使用 sn.exe 实用程序来验证强名称签名。
打开 Visual Studio 命令提示符
类型:
sn.exe -vf 程序集名称.dll
您还可以同时验证所有程序集:
打开 Visual Studio 命令提示符
类型:
FOR %a IN (*.dll) DO sn.exe -vf %a