我无法使用强名称密钥签名构建项目 - 标题中的消息总是出现。
是的,该项目最初是从另一台机器复制过来的。但是,即使我通过项目属性中的签名选项卡添加新密钥,仍然会显示此错误。
我尝试以管理员身份运行 Visual Studio,并尝试手动将密钥添加到 Windows 证书存储区。
帮助!
编辑:我没有在新项目中遇到此错误,但我很想让这个现有项目正常工作。即使我创建一个新证书也不起作用!
我终于找到了解决方案。
编辑相关项目的 .csproj 文件。删除以下代码行:
转到 Visual Studio 中项目的“属性”。然后转到签名选项卡。
然后确保 Sign the Click Once manifests 已关闭。
更新说明:
在您的解决方案资源管理器中:
右键单击您的项目,通常在左侧单击属性,选择“签名”选项卡,勾选对 ClickOnce 清单进行签名确保您保存!
https://i.stack.imgur.com/FIHjg.png
这很简单!!
我按照以下步骤解决了这个问题:
打开项目属性单击签名选项卡并取消选中“签署程序集”
而已!!
在记事本中打开 .csproj 文件。删除证书存储区中与签名证书相关的以下信息
尝试这个:
右键单击您的项目→转到属性→单击屏幕左侧的签名→取消选中签名单击一次清单→保存并构建
转到 Visual Studio 中的项目“属性”。然后转到签名选项卡。
然后确保 Sign the Click Once manifests 已关闭。
或者
1.在记事本中打开 .csproj 文件。
2.删除证书存储中与签名证书相关的以下信息 xxxxx xxxxxx xxxxxxxx.pfx true false `
为我工作。
https://i.stack.imgur.com/ZJzee.jpg
手动将密钥添加到 Windows 证书存储是不够的。证书仅包含签名的公钥。您还必须导入与证书中的公钥关联的私钥。 .pfx 文件在单个文件中包含公钥和私钥。这就是您需要导入的内容。
您说您从另一台计算机复制文件。复制它们后,您是否“取消阻止”它们?具体来说,应该检查 .snk 文件以确保它没有被标记为不安全。
使用属性对具有强名称的程序集进行签名
打开 AssemblyInfo.cs
(在 $(SolutionDir)\Properties
中)
AssemblyKeyFileAttribute
或 AssemblyKeyNameAttribute
,指定包含密钥对的文件或容器的名称,以在使用强名称对程序集进行签名时使用。
添加以下代码:
[assembly:AssemblyKeyFileAttribute("keyfile.snk")]
如果您只需要在本地构建项目或解决方案,那么正如其他人所建议的那样,删除签名可能是一个非常简单的解决方案。
但是,如果您在像 TeamCity 这样的自动化构建服务器上遇到此错误,您可以在其中构建用于部署或分发的实际发布部分,您可能需要考虑如何将此证书正确安装到构建机器上的证书存储中,以便您获得在构建结束时签名的包。
通常不建议将任何 PFX 证书签入/提交到源代码控制中,因此在构建过程中如何在构建服务器上获取这些文件是另一个问题,但有时人们确实将此文件与解决方案一起存储代码,所以你可以在项目文件夹中找到它。
您需要做的只是在您的构建服务器上以适当的帐户安装此证书。
从 Windows Sysinternals 下载 PsExec。打开命令提示符,然后输入以下内容。它将生成一个新的命令提示符,以本地系统身份运行(假设您的 TeamCity 在默认的本地系统帐户下运行): > psexec.exe -i -s cmd.exe 在这个新的命令提示符下,切换到包含证书并输入要安装的文件名(将文件名更改为您的文件名): > mykey.pfx 导入证书向导将启动。单击并选择所有建议的默认值。运行构建。
所有功劳归于 Stuart Noble(然后我相信 Laurent Kempé ☺)。
出于安全考虑,由于代码中未包含 PFX 证书,因此(再次)遇到了这个问题。
对于本地测试,如调试构建,该解决方案的首席程序员让我进入属性,签名,单击“创建测试证书”。在我们的设置中,他说只需单击确定,但如果有必要/需要,可以在此处输入强密码。
不定期副业成功案例分享
ManifestCertificateThumbprint
和ManifestKeyFile
可以解决问题。