“无法在证书库中找到清单签名证书” - 即使添加新密钥也是如此

时间:2012-08-14 17:03:35

标签: visual-studio-2010 visual-studio code-signing strongname

我无法使用强名称密钥签名构建项目 - 标题中的消息总是出现。

是的,项目最初是从另一台机器复制而来的。但是,即使我通过“项目属性”中的“签名”选项卡添加新密钥,仍会显示此错误。

我尝试以管理员身份运行Visual Studio,并尝试手动将密钥添加到Windows证书存储区。

帮助!

编辑:我没有在新项目中遇到此错误,但我非常希望让这个现有项目正常运行。即使我创建了新证书,它也无法工作!

11 个答案:

答案 0 :(得分:164)

我终于找到了解决方案,并且真的希望这也有助于其他人。

  1. 编辑相关项目的.csproj文件。
  2. 删除以下代码行:

    <PropertyGroup>
       <ManifestCertificateThumbprint>...........</ManifestCertificateThumbprint>
    </PropertyGroup>
    <PropertyGroup>
       <ManifestKeyFile>xxxxxxxx.pfx</ManifestKeyFile>
    </PropertyGroup>
    <PropertyGroup>
       <GenerateManifests>true</GenerateManifests>
    </PropertyGroup>
    <PropertyGroup>
       <SignManifests>false</SignManifests>
    </PropertyGroup>
    

答案 1 :(得分:102)

在visual studio中转到项目的“属性”。然后转到签名标签。

然后确保关闭“单击一次清单”。


更新说明:

在您的解决方案资源管理器中:

  1. 右键点击您的项目
  2. 点击属性
  3. 通常在左侧,选择“签名”标签
  4. 勾选签署ClickOnce清单
  5. 请务必保存!
  6. enter image description here

答案 2 :(得分:9)

  1. 在记事本中打开.csproj文件。
  2. 删除与证书存储中的签名证书相关的以下信息

    <PropertyGroup>
      <ManifestCertificateThumbprint>xxxxx xxxxxx</ManifestCertificateThumbprint>
      <ManifestKeyFile>xxxxxxxx.pfx</ManifestKeyFile>
    <GenerateManifests>true</GenerateManifests>
    <SignManifests>false</SignManifests>
    </PropertyGroup>
    

答案 3 :(得分:9)

试试这个: 右键单击您的项目 - &gt;转到属性 - &gt;点击屏幕左侧的签名 - &gt; 取消选中 签署一次清单 - &gt;保存&amp;构建

答案 4 :(得分:7)

这很简单!!

我按照以下步骤解决了这个问题:

  1. 打开项目属性 img
  2. 点击签名标签
  3. 取消选中&#34;签署程序集&#34;
  4. 那就是它!!

答案 5 :(得分:4)

转到visual studio中的“Properties”项目。然后转到签名标签。

然后确保关闭“单击一次清单”。

OR

1.在记事本中打开.csproj文件。

2.删除与证书存储区中的证书签名相关的以下信息            xxxxx xxxxxx       xxxxxxxx.pfx     真正     假     `

为我工作。

答案 6 :(得分:3)

假设这是您从中复制项目的系统上的窗口创建的个人证书,您可以使用项目所在系统上的证书管理器并导入证书。启动证书管理器(certmgr)并选择个人证书,然后右键单击现有证书列表下方,并从任务中选择导入。使用browse查找项目中的.pfx(您之前使用项目复制的系统中的.pfx)。它应该位于与项目目录同名的子目录中。我熟悉C#和VS,所以如果那不是你的环境,也许.pfx会在别处或者这个建议不适用。导入后,您应该收到状态消息。如果成功,编译证书错误应该消失。certmgr screen

答案 7 :(得分:0)

使用属性

对具有强名称的程序集进行签名

打开AssemblyInfo.cs(在$(SolutionDir)\Properties

AssemblyKeyFileAttributeAssemblyKeyNameAttribute,指定包含在使用强名称对程序集进行签名时要使用的密钥对的文件或容器的名称。

添加以下代码:

[assembly:AssemblyKeyFileAttribute("keyfile.snk")]

答案 8 :(得分:0)

仅将密钥手动添加到Windows证书库是不够的。证书仅包含已签名的公钥。您还必须导入与证书中的公钥关联的私钥。 .pfx文件在单个文件中包含公钥和私钥。这就是您需要导入的内容。

答案 9 :(得分:0)

您说您从其他计算机复​​制了文件。复制它们后,你是否“解锁”了它们?具体而言,应检查.snk文件以确保它未被标记为不安全。

答案 10 :(得分:0)

如果您只需要在本地构建项目或解决方案,那么删除签名可能是一个死忠的简单解决方案,就像其他人建议的那样。

但是,如果在TeamCity等自动化构建服务器上出现此错误,在该服务器上构建实际的发行版以进行部署或分发,则可能需要考虑如何将该证书正确安装到构建计算机上的证书存储中,因此您将在构建结束时获得签名的软件包。

通常不建议将任何 PFX 证书签入/提交到源代码管理中,因此在构建过程中如何在构建服务器上获取此文件是另一个问题,但是有时人们确实将此文件与解决方案代码一起存储,因此您可以在项目文件夹中找到它。

所有您需要做的就是将该证书安装在构建服务器上的 proper 帐户下。

  1. 下载PsExec from Windows Sysinternals

  2. 打开命令提示符,然后输入以下内容。它将生成一个新的命令提示符,以 Local System (假设您的TeamCity在默认的Local System帐户下运行)运行:

    > psexec.exe -i -s cmd.exe

  3. 在此新命令提示符下,转到包含证书的目录,然后输入要安装的文件名(将文件名更改为您的文件名):

    > mykey.pfx

  4. “导入证书”向导将启动。单击并选择所有建议的默认值。

  5. 运行构建。

所有功劳归于 Stuart Noble (然后归功于 LaurentKempé我相信I)。