“无法在证书存储中找到清单签名证书” - 即使添加新密钥

Posted

技术标签:

【中文标题】“无法在证书存储中找到清单签名证书” - 即使添加新密钥【英文标题】:“Unable to find manifest signing certificate in the certificate store” - even when add new key 【发布时间】:2012-08-14 17:03:34 【问题描述】:

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

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

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

救命!

编辑:我没有在新项目中遇到此错误,但我很想让这个现有项目正常工作。即使我创建一个新证书也不行!

【问题讨论】:

什么类型的VS项目?您是否也取消选中项目属性签名选项卡上的“签署 ClickOnce 清单”? @Simon Mourier,如果我取消选中该选项,那么文件将不会被签名。我要签名!这是一个 C# 项目。在我的主要开发机器上运行良好,只是在笔记本电脑上不行。 错误信息是显示在构建日志中还是以其他方式显示?如果您复制并粘贴日志可能会有所帮助。 构建日志中的错误:“无法在证书存储中找到清单签名证书” 我没有在接受的答案中看到代码行。但这对我有用:我在 VS2015 中创建了一个新密钥。我取消单击签署程序集并保存。然后我单击从文件中选择按钮,选择我刚刚创建的文件,再次单击对程序集进行签名,然后保存。重建。 【参考方案1】:

我终于找到了解决办法。

    编辑相关项目的.csproj 文件。

    删除以下代码行:

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

【讨论】:

也为我工作。这种行为有什么注意事项吗? 是的,用“Manifest”删除了任何东西,它起作用了:-) 在不知道后果的情况下我不会这样做...无论如何都会这样做 就我而言,删除ManifestCertificateThumbprintManifestKeyFile 可以解决问题。 为我工作。不知道这会产生什么影响,但至少其中一个是一个可行的项目,所以这对我来说已经足够了。【参考方案2】:

在 Visual Studio 中转到项目的“属性”。然后转到签名选项卡。

然后确保 Sign the Click Once manifests 已关闭。


更新说明:

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

    右键单击您的项目 点击属性 通常在左侧,选择“签名”标签 勾选签署 ClickOnce 清单 请务必保存!

【讨论】:

你说的很好,应该可以工作,但没有。最后我不得不删除下面答案中提到的代码行 这是做什么的/这个动作是什么意思? @TrailMix 它会适当地修改你的配置文件。 这给了我一个 vs2010 的解决方案 :) up ! 不错的答案!我正在使用VS2012,它确实有效! +1【参考方案3】:

很简单!!

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

    打开项目属性 单击“签名”选项卡 并取消选中“签署程序集”

就是这样!!

【讨论】:

【参考方案4】:
    在记事本中打开 .csproj 文件。

    在证书库中删除以下与签名证书相关的信息

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

【讨论】:

【参考方案5】:

试试这个: 右键单击您的项目 -> 转到 properties -> 点击屏幕左侧的 signing -> Uncheck Sign点击一次显示 -> 保存并构建

【讨论】:

【参考方案6】:

在 Visual Studio 中转到您的项目“属性”。然后转到签名选项卡。

然后确保 Sign the Click Once manifests 已关闭。

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

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

为我工作。

【讨论】:

【参考方案7】:

假设这是您复制项目的系统上的 Windows 创建的个人证书,您可以在项目现在所在的系统上使用证书管理器并导入证书。启动证书管理器 (certmgr) 并选择个人证书,然后右键单击现有证书列表下方并从任务中选择导入。使用浏览器在项目中查找 .pfx(您在项目中复制的上一个系统中的 .pfx)。它应该在与项目目录同名的子目录中。我熟悉 C# 和 VS,所以如果这不是您的环境,那么 .pfx 可能会在其他地方,或者这个建议可能不适用。导入后,您应该会收到一条状态消息。如果成功了,编译证书的错误应该就没有了。

【讨论】:

清晰简洁!【参考方案8】:

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

【讨论】:

谢谢,但已经尝试过了。无论如何,Visual Studio 应该在您创建新证书时自动添加证书。但是我也尝试过手动添加 .pfx 文件。左窗口将其安装在正确的证书存储中,并将其添加到我的个人存储中。 私钥未存储在证书存储中。请阅读此内容,也许它会帮助您理解其中的区别:technet.microsoft.com/en-us/library/cc962112.aspx 我应该补充一点,您可以通过在证书管理器中打开证书属性窗口来验证关联的私钥是否可用。如果私钥可用,“常规”页面底部会显示以下文本:“您有与此证书对应的私钥”。如果您没有看到该文本,则说明未安装私钥。 是的,它确实说“您有一个与此证书对应的私钥”。 我认为排除了密钥或证书的问题。【参考方案9】:

您说您从另一台计算机复制了文件。复制它们后,您是否“取消阻止”它们?具体来说,应该检查 .snk 文件以确保它没有被标记为不安全。

【讨论】:

它没有被阻止,它来自 Windows Live Mesh 同步软件。但是这无关紧要,因为即使在笔记本电脑上的 Visual Studio 中创建新密钥也行不通。【参考方案10】:

使用属性对具有强名称的程序集进行签名

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

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

添加以下代码:

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

【讨论】:

添加这一行没有任何区别,我仍然得到同样的错误。【参考方案11】:

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

但是,如果您在 TeamCity 等自动化构建服务器上遇到此错误,您可以在其中构建用于部署或分发的实际发行版块,您可能需要考虑如何将此证书正确安装到构建机器上的证书存储中,所以你会在构建结束时获得一个签名的包。

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

您只需在构建服务器上的正确帐户下安装此证书即可。

    下载PsExec from Windows Sysinternals。

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

    &gt; psexec.exe -i -s cmd.exe

    在这个新的命令提示符下,切换到包含证书的目录并输入要安装的文件名(将文件名更改为您的):

    &gt; mykey.pfx

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

    运行构建。

所有的功劳都归于 Stuart Noble(然后进一步归于 Laurent Kempé 我相信 ☺)。

【讨论】:

【参考方案12】:

出于安全考虑,由于代码中未包含 PFX 证书,因此(再次)遇到了这个问题。

对于本地测试,例如调试版本,此解决方案的首席程序员让我进入属性、签名,单击“创建测试证书”。在我们的设置中,他说只需单击确定,但如果有必要/需要,可以在此处输入强密码。

【讨论】:

以上是关于“无法在证书存储中找到清单签名证书” - 即使添加新密钥的主要内容,如果未能解决你的问题,请参考以下文章

即使在添加子视图后也无法使用锚添加约束

即使没有添加外键也无法添加外键约束

即使满足条件并且即使目标表和源表中的字段已经存在,雪花合并也会添加数据

即使没有明确的 [AutoValidateAntiforgeryToken],是不是也会自动添加防伪令牌?

insserv:缺少`Required-Stop:'条目:即使为空也请添加

用户输入验证不起作用!如果我点击提交,即使输入位置为空,仍然会添加 |安卓开发