一尘不染

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

jenkins

我正在尝试在Windows Server计算机上构建ClickOnceWindows窗体项目(.NET 3.5 / Visual
Studio 2010)。 (为了使 Hudson
CI自动化构建过程,请执行以下操作。)

为了签署ClickOnce清单,我在VisualStudio中创建了一个临时密钥temp.pfx。我可以从工作站上的VisualStudio成功构建和部署项目。但是在服务器上运行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-发生内部错误。

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

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

=>该问题的操作也无法通过以上两个答案获得成功,但不幸的是,即使他得到的答案也无法帮助我:

以在生成计算机上运行MSBuild的用户身份登录,手动调用MSBuild,然后在出现提示时输入密码。

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

最终为我解决的问题是使用TFS Build服务在本地计算机上运行管理员的帐户。

=>运行Hudson(更准确地说 Tomcat)的帐户已经 _是_本地管理员。我甚至尝试从“以管理员身份运行”命令行运行MSBuild,并且仍然会收到相同的错误消息。


更新: 我试图在同一服务器上的VisualStudio中打开解决方案并进行构建。我犯了同样的错误。当我尝试在项目属性的“签名”选项卡中重新导入PFX文件时,它告诉我“无效密码”。如果我尝试在工作站上VisualStudio的完全相同的解决方案中导入完全相同的文件并提供相同的密码,则该密码将被接受。

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

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


阅读 403

收藏
2020-07-25

共1个答案

一尘不染

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

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

如果您打开VisualStudio项目,请转到项目属性并尝试创建一个新证书,它有效吗?它应该创建一个PFX文件并将其添加到项目中。并且可以在证书存储区(菜单Start /certmgr.msc)中看到它吗?

2020-07-25