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