8

我正在运行 Visual Studio 2012 并在单独的解决方案中编写后端 Web 服务和桌面软件。因为桌面软件需要运行提升(“作为管理员”),我需要在提升的 Visual Studio 实例中运行桌面解决方案。两种解决方案都包括一个签名的库项目。

当我在 Visual Studio 实例中打开 Web 服务解决方案而不提升它时,我收到一个构建错误,例如

无法导入以下密钥文件:Redacted.pfx。密钥文件可能受密码保护。要更正此问题,请尝试再次导入证书或手动将证书安装到具有以下密钥容器名称的强名称 CSP:VS_KEY_Redacted。

当我尝试通过这样做来解决此问题时,它会失败并显示一条错误消息,指出密钥已存在。

当我尝试排除然后重新包含 PFX 文件时,PFX 文件并没有正确处理,而是使项目属性 → 签名中的“强名称密钥文件”下拉列表为空白。在此之后,Web 服务解决方案构建,但似乎该库没有得到签名,因为在(提升的)桌面解决方案中,构建失败并显示“程序集生成失败 - 引用的程序集'编辑'没有强名称”。

如果我尝试从 Web 服务解决方案的下拉列表中再次选择 PFX 文件(并重新输入密码),我会得到:

导入密钥
时出错尝试引用不存在的令牌

从(提升的)桌面解决方案设置 PFX 文件是可行的,但让我回到第一方。

似乎根据海拔高度,Visual Studio 会在不同的密钥存储中查找解锁 PFX 的任何内容。我是否必须运行提升的 Visual Studio 的两个实例来解决该问题,或者我可以以某种方式告诉它在同一个地方查找?

4

1 回答 1

0

@ccpanda 的评论解决了这个问题。包括AssemblyKeyFile档案使这项工作。例如:

[assembly: AssemblyKeyFile("HerpDerpWarblerManagementStudioProTM.snk")]

总而言之,这两个 Visual Studio 将根据其模式假设不同的事物。解决方案不是让他们假设同样的事情,而是告诉他们该做什么。

(我选择使用.snk文件,因为如果您不想每次其他开发人员尝试构建时都重新输入密码,那么您必须这样做。这个问题有更多信息。基本上,你必须使用.snk文件或编译您的构建过程,然后通过调用对文件进行签名,sn.exe以某种方式知道为每个人使用.pfx文件。)

(@ccpanda:如果你把你的评论写成答案(也许你写了,而且 Stack Overflow 帮助地认为它是微不足道的),我会把它标记为答案。)

于 2013-01-09T09:34:16.333 回答