我正在尝试在Windows Server计算机上构建ClickOnce Windows窗体项目(.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 \职位[...]的csproj]
C:\ Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets(1970,9):错误MSB3321:导入密钥文件"temp.pfx"已取消.[C:.hudson \职位[...]的csproj]
我没有运气就尝试了以下所有问题和答案:
Stack Overflow问题无法导入密钥文件'blah.pfx' - 错误'密钥文件可能受密码保护'
=>就我而言,错误消息并不表示证书存储的名称,而是表示"当前用户的个人证书存储".
=>即使以"个人"作为容器名称(sn -i temp.pfx personal)尝试接受的答案,它也无法解析密钥:
无法解析ALiS_TemporaryKey.pfx中的PKCS#12 blob - 发生内部错误.
Stack Overflow问题使用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 …
我正在尝试使用ClickOnce应用程序在Azure DevOps中进行CI / CD。使用托管代理时,如何在构建过程中安全地提供代码签名证书?
注意我知道您可以按照Visual Studio团队服务deploymen / buildt证书错误的建议使用脚本。但是,这种方法并不安全。该证书将被加载到托管代理运行所在帐户的证书存储中。这将允许代理以及其他Azure DevOps帐户潜在地访问和使用证书。