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