11

我正在尝试在 Windows Server 计算机上构建 ClickOnce Windows Forms项目(.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\jobs[...].csproj]

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

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

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

    => 在我的情况下,错误消息不指示证书存储的名称,而是显示“当前用户的个人证书存储”。

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

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

  • 堆栈溢出问题使用 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 Professional,服务器是Windows Server 2008 R2 Standard。

4

4 回答 4

8

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

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

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

于 2012-07-04T23:52:04.323 回答
0

我发现如果您创建一个临时的.pfx 文件并将密码留空,那么它将在构建机器上正常工作。我没有意识到你可以把它留空,并且第一次失败就像 OP 一样。创建了第二个没有密码的 temp.pfx,它为我构建在构建服务器上。

于 2015-02-05T20:36:17.727 回答
0

我有完全相同的问题。并通过在构建机器上安装适用于 .net 4.0 的 Windows SDK 7.1 来修复它。PS 起初我们已经安装了 SDK 8.0A,构建工作正常,除了唱歌。看来,7.1 更新了系统中的一些组件,所以 pfx 开始工作了。

于 2015-04-16T08:55:19.057 回答
-1

我有同样的问题,无法在 TFS 机器上导入。原来我必须在开发人员机器上导出它(项目属性,签名页面,单击更多详细信息)-> 选项卡详细信息,然后使用密码导出。将导出的文件复制到 TFS 并使用相同的密码:完成

于 2014-03-14T18:08:31.663 回答