在VS 2010中有一种简单的方法来签署C++ CLI程序集吗?

jyo*_*ung 21 .net c++-cli visual-studio-2010 assembly-signing

现在我正在设置Linker/Advanced/KeyFile选项.

我收到"mt.exe:一般警告810100b3:是一个强名称签名的程序集,并且嵌入清单会使签名无效.您需要重新签名此文件才能使其成为有效的程序集." .

从网上阅读,听起来我必须设置延迟签名选项,下载SDK,并运行sn.exe作为后期构建事件.当然在VS2010中必须有一种更简单的方法来执行这种常见操作?

Han*_*ant 15

这里有相当多的跛足,这在以前从未奏过.它在VS2010中被"修复"了,mt.exe现在会生成一个警告,而不是让它无声地出错.不是真正的修复,并且没有明显的修复,链接器不能只嵌入签名并且仍然允许mt.exe在之后运行.

解决方案是使用构建后事件重新签署程序集.看起来像这样:

Command = sn -Ra"$(TargetPath)"$(ProjectName).snk

如果您还没有密钥文件,则需要自己创建.snk文件,从Visual Studio命令提示符运行sn.exe.例如:

cd \whereTheProjectIsLocated
sn.exe -k MyProject.snk
Run Code Online (Sandbox Code Playgroud)

或者从容器中提取它或使用指定的密钥文件.延迟签名只是使用正确的命令行选项运行sn.exe.

  • 在我看来,这在Visual Studio 2008中运行良好 - 清单嵌入时没有警告,并且生成的程序集仍然正确签名(sn -v报告没有错误).您是否知道有关VS 2010中为何更改的详细信息? (2认同)
  • 投票在MSDN Connect上修复它:https://connect.microsoft.com/VisualStudio/feedback/details/464524/mt-error-810100b (2认同)

小智 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>
Run Code Online (Sandbox Code Playgroud)

  • 你让我今天一整天都感觉很好!这解决了我们的C++/CLI应用程序未被签名的问题.并且你的方法一次性修复了团队的所有成员(感谢SVN :)) (2认同)
  • 救星.这解决了我的问题,现在使用源签入修复程序. (2认同)