MSBuild无法使用临时密钥签署ClickOnce清单(错误MSB3326和MSB3321)

chi*_*oro 10 msbuild clickonce hudson code-signing jenkins

我正在尝试在Windows Server计算机上构建ClickOnce Windows窗体项目(.NET 3.5/Visual Studio 2010).(努力使用Hudson CI自动化构建过程.)

为了签署ClickOnce清单,我在Visual Studio中创建了一个临时密钥temp.pfx.我可以在我的工作站上从Visual Studio成功构建和部署项目.但是当在服务器上运行MSBuild时,我收到以下错误消息:

C:\ Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets(1970,9):错误MSB3326:无法导入以下密钥文件:.密钥文件可能受密码保护.要更正此问题,请尝试再次导入证书或手动将证书导入当前用户的个人证书存储区.[C:.hudson \职位[...]的csproj]

C:\ Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets(1970,9):错误MSB3321:导入密钥文件"temp.pfx"已取消.[C:.hudson \职位[...]的csproj]

我没有运气就尝试了以下所有问题和答案:

  • Stack Overflow问题无法导入密钥文件'blah.pfx' - 错误'密钥文件可能受密码保护'

    =>就我而言,错误消息并不表示证书存储的名称,而是表示"当前用户的个人证书存储".

    =>即使以"个人"作为容器名称(sn -i temp.pfx personal)尝试接受的答案,它也无法解析密钥:

    无法解析ALiS_TemporaryKey.pfx中的PKCS#12 blob - 发生内部错误.

  • Stack Overflow问题使用MSBuild对ClickOnce或程序集进行签名导致错误MSB3321

    =>我尝试了接受的答案,但无法导入密钥文件,因为"无法访问用户配置文件,或者您导入的私钥可能需要未安装在系统上的加密服务提供程序"

    =>如果我尝试通过在Windows资源管理器中双击导入文件(RobinDotNet的建议),也会发生同样的情况

  • Stack Overflow问题在MSBuild,Team Build和TFS中使用PFX文件签署程序集

    =>这个问题的OP也没有成功解决上述两个问题,但遗憾的是,他得到的答案甚至都没有帮助我:

    以在构建计算机上运行MSBuild的用户身份登录,手动调用MSBuild,然后在出现提示时键入密码.

    =>我登录并运行msbuild myproject.sln但它甚至不会提示我输入密码.

    最终为我修复的是制作TFS Build服务在本地计算机上运行管理员的帐户.

    =>运行Hudson(更准确地说:Tomcat)的帐户已经本地管理员.我试图从"以管理员身份运行"命令行运行MSBuild,并且仍然会收到相同的错误消息.


更新:我尝试在同一台服务器上的Visual Studio中打开解决方案并构建它.我犯了同样的错误.当我尝试在项目属性的"签名"选项卡中重新导入PFX文件时,它会告诉我"密码无效".如果我尝试在我的工作站上的Visual Studio中的同一个解决方案中导入相同的文件并提供相同的密码,则会被接受.

更新2:如果我使用Visual Studio 2008生成的旧临时密钥,可以将其成功导入到我们服务器的证书库中; 我无法导入我使用Visual Studio 2010新创建的任何临时密钥.

更新3:我能够在服务器上的Visual Studio中创建一个新的"临时密钥",并在服务器和工作站上使用它来签署ClickOnce清单.我只是无法对它做出合理的解释 - 两台计算机都是64位,我在两者上都使用Visual Studio 2010.两者都安装了v3.5和v4(4.0.30319).NET框架.我的工作站是Windows 7专业版,服务器是Windows Server 2008 R2标准版.

Rob*_*Net 8

将PFX文件复制到正在进行构建的计算机上.双击它,并将其安装在计算机上的证书管理器中.确保您已登录用于执行构建的帐户.

其他建议/问题:您是否在计算机上安装了正确版本的.NET?您是否有权写入该计算机上的证书存储区?

如果打开Visual Studio项目,请转到项目属性并尝试创建新证书,它是否有效?它应该创建一个PFX文件并将其添加到项目中.你能在证书库中看到它(菜单Start/certmgr.msc)吗?

  • 嗯,这就是我所知道的。我们有几个使用代码签名证书签名的 ClickOnce 项目。每年证书到期时,我们在 TFS 中的自动构建都会失败。我们必须以执行自动构建的帐户登录服务器并导入 PFX 文件。它必须在用户的证书存储中。否则,当它进行构建时,它会尝试提示输入密码,但由于显而易见的原因,这不起作用。我从来没有试过把它放在机器商店里,但你可以试试。回帖,如果您需要,我会提供说明。 (2认同)