我们刚刚将Visual Studio 2008项目升级到Visual Studio 2010.我们使用Verisign代码签名证书对所有程序集进行了强签名.自升级以来,我们不断收到以下错误:
无法导入以下密钥文件:companyname.pfx.密钥文件可能受密码保护.要更正此问题,请尝试再次导入证书,或使用以下密钥容器名称手动将证书安装到强名称CSP:VS_KEY_3E185446540E7F7A
这种情况发生在一些开发者机器而不是其 用于解决此问题的一些方法在某些时候起作用包括:
我已经尝试使用SN.EXE实用程序(强名称工具)来注册具有强名称CSP的密钥,如错误消息所示,但每当我使用Visual Studio 2010附带的版本运行任何选项的工具时,SN .EXE只列出其命令行参数而不是执行任何操作.无论我提供什么参数,这都会发生.
为什么会发生这种情况,以及解决这个问题的明确步骤是什么?我即将放弃ClickOnce安装和Microsoft代码签名.
我正在尝试在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 …
我正在尝试使用也用于数字签名的PFX文件来强制命名程序集.PFX证书具有CodeSigning选项,由CA提供.
当我尝试使用它时,我收到以下错误:
错误MSB3325:无法导入以下密钥文件:myCert.pfx.密钥文件可能受密码保护.要更正此问题,请尝试再次导入证书,或使用以下密钥容器名称手动将证书安装到强名称CSP:VS_KEY_B763CB2413AC1708
我试图删除它并使用重新安装PFX
sn -d VS_KEY_B763CB2413AC1708
sn -i myCert.pfx VS_KEY_B763CB2413AC1708
Run Code Online (Sandbox Code Playgroud)
但那没用.我试图将证书放在证书库中 - 这也没有改变一件事.我试图以管理员身份运行Visual Studio以及从命令行执行MSBuild.
我还尝试使用本地生成的证书(有效)延迟签署程序集,然后使用它重新签名
sn -R myAssembly.dll myCert.pfx
Run Code Online (Sandbox Code Playgroud)
然后我收到以下错误:
Failed to re-sign the assembly -- Keyset does not exist
Run Code Online (Sandbox Code Playgroud)
我在使用Visual Studio项目设计器的签名页,签名程序集的ClickOnce Manifest签名和强名称程序集签名中找到了代码签名证书的要求.看起来他们都满足了,但我可能会错过一些东西.我该如何解决这个问题?
我在Visual Studio 2008中设置了我的简单项目以使用ClickOnce安装程序.我已经指定ClickOnce清单应该由我们的comapny的PFX文件签名.当我在Visual Studio中设置它时,它要求输入PFX文件的密码,我很乐意提供.当我在Visual Studio中构建和发布时,一切正常.它也可以在我的机器上使用MSBuild进行精细构建.
但是,当我尝试在我们的构建机器上使用MSBuild构建它时,我收到以下错误:
ERROR MSB3321 in
C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets(1805,7)
: Importing key file "ourCertificate.pfx" was canceled (sic).
Run Code Online (Sandbox Code Playgroud)
经过一些搜索,我发现了一些信息,说这是因为我没有提供密码.但我找不到在构建机器上提供密码的方法.我也看到了安装Visual Studio的建议,并在Visual Studio中提供了一次密码,之后它将在MSBuild中运行.但我真的想避免在构建机器上安装Visual Studio.
我曾尝试双击PFX文件导入它并在询问时输入密码,但这没有帮助.
如果我在Visual Studio中选中"签署程序集"并提供相同的PFX文件,则会发生同样的情况.
我该如何解决这个问题?是否有手动方式在构建机器上存储密码?