首页 文章

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

提问于
浏览
4

我们正在用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 Tools一起使用 .

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 .

  • 1

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

    <AssemblyOriginatorKeyFile>applicationcert.pfx</AssemblyOriginatorKeyFile>
    

相关问题