我正在尝试在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标准版 .