我们正在用C#构建一个Outlook插件.它在VS中构建没有问题,并使用临时pfx证书进行签名.我们希望将构建过程放在Jenkins中并让它自动运行.
我们尝试使用MSBuild运行VS解决方案.它在开发机器上运行良好,但在Jenkins中有一个错误:
Cannot import the following key file: OutlookPlugin_TemporaryKey.pfx. The key file
may be password protected. To correct this, try to import the certificate again or manually
install the certificate to the Strong Name CSP with the following key container name:
VS_KEY_A688DC31A30F3EF1
我们不知道如何为自动构建指定pfx密码.或以其他方式自动化签名过程.
我们发现的一个解决方案是在VS中在同一台机器上以及与自动化过程相同的用户打开项目并输入密码.这不起作用,可能是因为Jenkins每次都会清除工作空间.
如果我们尝试编译而不签名然后再签名,则会抱怨必须签署ClickOnce程序集. Office插件似乎必须使用ClickOnce.
那么,如何在构建文件中的某处指定pfx密码?
我们将VS 2010与Office Tools一起使用.
解决方法:
创建一个文件(本地或在众所周知的网络共享上),其中包含密码作为属性,并从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.