我正在尝试在 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。