【发布时间】:2012-06-24 17:34:44
【问题描述】:
我正在尝试在 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]
我尝试了以下所有问题和答案,但没有运气:
-
堆栈溢出问题Cannot import the keyfile 'blah.pfx' - error 'The keyfile may be password protected'
=> 在我的例子中,错误消息没有指明证书存储的名称,而是显示“当前用户的个人证书存储”。
=> 即使尝试使用“个人”作为容器名称 (
sn -i temp.pfx personal) 的接受答案,它也无法解析密钥:无法解析 ALiS_TemporaryKey.pfx 中的 PKCS#12 blob -- 内部错误 发生了。
-
堆栈溢出问题Using MSBuild to sign ClickOnce or assembly results in error MSB3321
=> 我尝试了接受的答案,但无法导入密钥文件,因为 “用户配置文件不可访问,或者您正在导入的私钥可能需要未安装在您的密码服务提供商上系统”
=> 如果我尝试通过在 Windows 资源管理器中双击文件来导入文件,也会发生同样的情况(RobinDotNet 的建议)
-
堆栈溢出问题Signing assemblies with PFX files in MSBuild, Team Build, and TFS
=> 上面两个答案的那个问题的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。
【问题讨论】:
标签: msbuild hudson jenkins clickonce code-signing