ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

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

帮助!

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

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

A
Anye

我终于找到了解决方案。

编辑相关项目的 .csproj 文件。删除以下代码行: ............ xxxxxxxx.pfx < PropertyGroup> true false


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

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

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

更新说明:

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

右键单击您的项目,通常在左侧单击属性,选择“签名”选项卡,勾选对 ClickOnce 清单进行签名确保您保存!

https://i.stack.imgur.com/FIHjg.png


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

这很简单!!

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

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

而已!!


这可能会阻止发布(如果我们关心的话),但现在它运行了。
A
Alex Jolig

在记事本中打开 .csproj 文件。删除证书存储区中与签名证书相关的以下信息 xxxxx xxxxxx xxxxxxxx.pfx true false


U
Uwe Keim

尝试这个:

右键单击您的项目→转到属性→单击屏幕左侧的签名→取消选中签名单击一次清单→保存并构建


A
Ash

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

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

或者

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

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

为我工作。


d
dpminusa

https://i.stack.imgur.com/ZJzee.jpg


简洁明了!
O
Owen Wengerd

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


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

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


它没有被阻止,它来自 Windows Live Mesh 同步软件。然而,这无关紧要,因为即使在笔记本电脑上的 Visual Studio 中创建新密钥也不起作用。
A
Alex Jolig

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

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

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

添加以下代码:

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

添加这一行并没有什么不同,我仍然得到同样的错误。
S
Sevenate

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

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

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

您需要做的只是在您的构建服务器上以适当的帐户安装此证书。

从 Windows Sysinternals 下载 PsExec。打开命令提示符,然后输入以下内容。它将生成一个新的命令提示符,以本地系统身份运行(假设您的 TeamCity 在默认的本地系统帐户下运行): > psexec.exe -i -s cmd.exe 在这个新的命令提示符下,切换到包含证书并输入要安装的文件名(将文件名更改为您的文件名): > mykey.pfx 导入证书向导将启动。单击并选择所有建议的默认值。运行构建。

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


D
Dharman

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

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