204

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

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

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

帮助!

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

4

12 回答 12

330

我终于找到了解决方案。

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

  2. 删除以下代码行:

    <PropertyGroup>
       <ManifestCertificateThumbprint>...........</ManifestCertificateThumbprint>
    </PropertyGroup>
    <PropertyGroup>
       <ManifestKeyFile>xxxxxxxx.pfx</ManifestKeyFile>
    </PropertyGroup>
    <PropertyGroup>
       <GenerateManifests>true</GenerateManifests>
    </PropertyGroup>
    <PropertyGroup>
       <SignManifests>false</SignManifests>
    </PropertyGroup>
    
于 2012-08-26T12:27:04.500 回答
196

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

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


更新说明:

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

  1. 右键单击您的项目
  2. 点击属性
  3. 通常在左侧,选择“签名”选项卡
  4. 勾选签署 ClickOnce 清单
  5. 确保你保存!

在此处输入图像描述

于 2015-03-02T13:17:06.497 回答
19

这很简单!!

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

  1. 打开项目属性 图像
  2. 单击签名选项卡
  3. 并取消选中“签署程序集”

就是这样!!

于 2018-04-29T03:37:03.990 回答
13
  1. 在记事本中打开 .csproj 文件。
  2. 删除证书存储区中与签名证书相关的以下信息

    <PropertyGroup>
      <ManifestCertificateThumbprint>xxxxx xxxxxx</ManifestCertificateThumbprint>
      <ManifestKeyFile>xxxxxxxx.pfx</ManifestKeyFile>
    <GenerateManifests>true</GenerateManifests>
    <SignManifests>false</SignManifests>
    </PropertyGroup>
    
于 2014-08-13T12:51:50.003 回答
10

试试这个:右键单击您的项目 -> 转到属性-> 单击屏幕左侧的签名 ->取消选中Sign the click once manifests -> Save & Build

于 2016-11-28T08:53:04.417 回答
6

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

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

或者

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

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

为我工作。

于 2016-05-05T15:50:55.830 回答
4

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

于 2014-10-27T17:52:20.273 回答
0

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

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

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

添加以下代码:

[assembly:AssemblyKeyFileAttribute("keyfile.snk")]
于 2012-08-19T17:23:41.153 回答
0

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

于 2012-08-23T21:10:31.310 回答
0

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

于 2012-08-24T15:39:24.013 回答
0

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

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

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

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

  1. 从 Windows Sysinternals下载PsExec

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

    > psexec.exe -i -s cmd.exe

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

    > mykey.pfx

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

  5. 运行构建。

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

于 2018-07-03T22:58:57.950 回答
0

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

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

于 2021-08-17T20:10:09.433 回答