现在我正在设置Linker / Advanced / KeyFile选项。
我收到“mt.exe:一般警告810100b3:是一个强名称签名的程序集,嵌入清单会使签名无效。您需要重新签名此文件才能使其成为有效的程序集。 “
从网上阅读,听起来我必须设置延迟签名选项,下载SDK,并将sn.exe作为post build事件运行。当然在VS2010中必须有一种更简单的方法来执行这种常见操作吗?
答案 0 :(得分:15)
这里有相当多的跛足,这在以前从未奏效过。它已经在VS2010中“修复”了,mt.exe现在会生成一个警告,而不是让它无声地出错。不是真正的解决方案,并且没有明显的解决方案,链接器不能只嵌入签名并且仍然允许mt.exe在之后运行。
解决方案是使用post-build事件重新签名程序集。看起来像这样:
Command = sn -Ra“$(TargetPath)” $(项目名).SNK
如果您还没有密钥文件,则需要自己创建.snk文件,从Visual Studio命令提示符运行sn.exe。例如:
cd \whereTheProjectIsLocated
sn.exe -k MyProject.snk
或者从容器中提取它或使用指定的密钥文件。延迟签名只是使用正确的命令行选项运行sn.exe。
答案 1 :(得分:14)
如果您不能/不会编辑Microsoft.Cpp.Win32.targets,则将以下内容添加到项目文件中也可以:
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- snip -->
<ItemDefinitionGroup>
<Link>
<KeyFile>$(LinkKeyFile)</KeyFile>
</Link>
</ItemDefinitionGroup>
</Project>
答案 2 :(得分:2)
保罗米德的建议是正确的,但这似乎是确定的:http://blogs.msdn.com/b/vcblog/archive/2011/03/11/10140139.aspx。请注意,更改文本很容易,但省略将“%”更改为“$”。
答案 3 :(得分:1)
我在VS32平台的VS2010 SP1中遇到了这个问题。查看build .log文件,我发现/ KEYFILE参数被赋予了.DLL的初始链接,但是在创建清单并完成第二个链接以包含清单后,缺少/ KEYFILE参数。看了一下后,我发现问题出在C:\ Program Files(x86)\ MSBuild \ Microsoft.Cpp \ v4.0 \ Platforms \ Win32中的Microsoft.Cpp.Win32.targets文件中。第二个链接的KeyFile属性存在拼写错误。我通过改变第441行来修复它:
KeyFile ="%(Link.KeyFile)"
到
KeyFile ="$(LinkKeyFile)"
通过该更改,第二个链接器传递包含/ KeyFile限定符,而.DLL是使用嵌入的publickey正确构建的。
答案 4 :(得分:1)
根据我的经验,最简单的方法是:
1)打开Visual Studio命令提示符2010。转到项目目录(它是包含源文件的目录)。然后输入sn -k yourKeyName.snk
。
2)在visual studio 2010中打开您的项目并打开AssemblyInfo.cpp文件并添加此行[assembly:AssemblyKeyFileAttribute("yourKeyName.snk")];
。
3)打开Project-&gt; Properties-&gt; Linker-&gt; Advanced。并在“密钥文件”插槽中放置yourKeyName.snk
。同样在“延迟信号”插槽中选择Yes (\DELAYSIGN)
。
4)正常构建项目。
答案 5 :(得分:0)
Phil Atkin的回复和链接是修复此错误的方法。 微软终于开始为Visual Studio 2010解决它,但他们从未发布过Service Pack修复程序。 转到此链接以获取MS说明和多种修复方法。
http://blogs.msdn.com/b/vcblog/archive/2011/03/11/10140139.aspx
它对我有用。谢谢菲尔。 (我会投票给你,但我还是个新手。)
编辑Mzedeler:
以下是大多数人可以使用的链接中最相关的信息。它超越了历史和多项目的影响。 (转到链接查看该内容。)
首先:修复构建过程中的拼写错误:
重新定义用于签署项目的“密钥文件”和“延迟签名”属性:
这些步骤适用于我的项目。有关更多详细信息,请转到Phil提供的上述链接。
结束编辑