下面的这篇博文详细介绍了确切的步骤
设置密钥文件
使用项目属性中的 Visual Studio“签名”选项卡创建受密码保护的私钥/公钥对 (KeyPair.pfx) 从密钥对中提取公钥并将其复制到单独的文件 (Key.snk) sn.exe -p 密钥对.pfx 密钥.snk
将 KeyPair.pfx 复制到您的构建服务器。我使用 C:\Program Files\MSBuild\KeyFile.pfx,因为它可以通过 $(MSBuildExtensionsPath) MSBuild 属性访问。将 KeyPair.pfx 文件移动到安全可靠的位置。密码也要保密。将 Key.snk 复制到开发人员可以访问的共享位置。为签名设置项目
对于您要签名的每个程序集:
- 打开项目属性 | 签约页面
- 选择 [X] 对程序集签名复选框。
- 选中 [X] 仅延迟符号复选框。
- 从密钥文件下拉列表中选择。
- 浏览到共享位置并选择 Key.snk 文件
- snk 文件将被复制到您分配给它的每个项目目录
- 将密钥文件从您的一个项目复制到解决方案项中,以便您可以将其用于测试运行配置
为重新签名设置测试运行配置
如果您想检测您的程序集并为您的单元测试启用代码覆盖率,那么您需要指定一个用于重新签名的密钥文件。
打开 LocalTestRun.testrunconfig 文件 在 Code Coverage 选项卡上,选择密钥作为重新签名密钥文件
在开发人员工作站上禁用强名称验证
由于您仅使用公钥进行延迟签名,因此 .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 的博客:在 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 是否正确地为您的程序集强命名,您可以使用 sn.exe 实用程序来验证强名称签名。
打开 Visual Studio 命令提示符类型:sn.exe -vf assemblyname.dll
您还可以同时验证所有程序集:
打开 Visual Studio 命令提示符类型: FOR %a IN (*.dll) DO sn.exe -vf %a