如何手动设置MSBuild标志目标的密码?

时间:2012-09-11 08:43:14

标签: c# msbuild outlook-addin pfx

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

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

  

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

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

我们发现的一个解决方案是在同一台机器上以及与自动化流程相同的用户在VS中打开项目并输入密码。这不起作用,可能是因为Jenkins每次都会清除工作空间。 如果我们尝试编译而不签名然后再签名,则会抱怨必须签署ClickOnce程序集。 Office插件似乎必须使用ClickOnce。

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

我们遇到了使用MSBuild和Bamboo构建项目的问题。我们的修复是从.csproj文件中删除以下行。

<AssemblyOriginatorKeyFile>applicationcert.pfx</AssemblyOriginatorKeyFile>