5

我们正在用 C# 构建一个 Outlook 插件。它在 VS 中构建没有问题,并使用临时 pfx 证书进行签名。我们希望将构建过程放在 Jenkins 中并让它自动运行。

我们尝试使用 MSBuild 运行 VS 解决方案。它在开发机器上运行良好,但在 Jenkins 中出现错误:

无法导入以下密钥文件:OutlookPlugin_TemporaryKey.pfx。密钥文件可能受密码保护。要更正此问题,请尝试再次导入证书或手动将证书安装到具有以下密钥容器名称的强名称 CSP:VS_KEY_A688DC31A30F3EF1

我们不知道如何为自动构建指定 pfx 密码。或者以其他方式自动化签名过程。

我们找到的一种解决方案是在同一台机器上以与自动化流程相同的用户身份在 VS 中打开项目并输入密码。这不起作用,可能是因为 Jenkins 每次都会清除工作区。如果我们尝试在不签名的情况下进行编译,然后再对其进行签名,它会抱怨必须对 ClickOnce 程序集进行签名。似乎 Office 插件必须使用 ClickOnce。

那么,如何在构建文件的某处指定 pfx 密码呢?

我们将 VS 2010 与 Office 工具一起使用。

4

2 回答 2

1

创建一个包含密码作为属性的文件(本地或众所周知的网络共享),并从 MSBuild 脚本中引用该密码。设置文件的权限,以便只有构建帐户可以读取该文件。请注意,任何对构建机器具有管理员访问权限或知道构建帐户密码的人都可以读取该密码。最终,这里没有灵丹妙药。如果 MSBuild 可以找到/解密/无论密码,那么人类也可以。

如果您担心私钥的安全性,请考虑将签名分离到一个单独的步骤并将私钥存储在智能卡上。这可能有点矫枉过正,但它是最好的、常用的保护措施之一。

否则,只需将密码添加为属性。如您所知,项目文件只是 MSBuild 脚本。例如:

<PropertyGroup>
    <PfxPassword>password</PfxPassword>
</PropertyGroup>

<!-- Sample sign task -->
<SignTask>
    <File>MyOutlookPlugin.dll</File>
    <KeyFile>OutlookPlugin_TemporaryKey.pfx</KeyFile>
    <Password>$(PfxPassword)</Password>
</SignTask>

有关 MSBuild 属性的详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms171458(v=vs.80).aspx

于 2012-09-11T08:56:24.320 回答
1

我们在使用 MSBuild 和 Bamboo 构建项目时遇到问题。我们的解决方法是从 .csproj 文件中删除以下行。

<AssemblyOriginatorKeyFile>applicationcert.pfx</AssemblyOriginatorKeyFile>
于 2015-07-09T04:11:27.037 回答