首页 文章

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

提问于
浏览
10

我正在尝试在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 \职位[...]的csproj]

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

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

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

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

=>我尝试了接受的答案,但无法导入密钥文件,因为"Either the user profile is not accessible or the private key that you are importing might require a cryptographic service provider that is not installed on your system"

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

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

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

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

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

=>运行Hudson的帐户(更确切地说:Tomcat)已经是本地管理员 . 我试图从"Run As Administrator"命令行运行MSBuild,并且仍会得到相同的错误消息 .


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

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

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

4 回答

  • -1

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

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

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

  • 7

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

  • 0

    我有完全相同的问题 . 并通过在构建计算机上安装Windows SDK 7.1 for .net 4.0来修复它 . PS首先我们安装了SDK 8.0A,除了唱歌之外,版本工作正常 . 看来,7.1更新了系统中的一些组件,因此pfx开始工作 .

  • 0

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

相关问题