增强的强命名

时间:2013-12-26 17:43:49

标签: .net clr

我正在测试增强型强命名(http://msdn.microsoft.com/en-us/library/hh415055.aspx)并在将其置于构建过程中时遇到一些问题。根据文章,您必须首先对组件进行延迟签名,然后重新签名以获得正确的增强型字符串名称。这对构建过程不起作用。通常我们在开发时延迟签名程序集,并在构建服务器上完全签名。有没有人有增强强命名的经验?

也发布在http://social.msdn.microsoft.com/Forums/vstudio/en-US/40eb9f2e-fc05-4732-8f40-14f34385acfc/enhanced-strong-naming?forum=clr

2 个答案:

答案 0 :(得分:1)

目前,您无法在编译时使用增强型强名称对程序集进行完全签名,因为C#编译器不支持使用增强型强名称进行签名。因此,要解决此限制,您必须在编译时延迟签名,然后使用sn.exe工具完全签名。

我不确定您的特定构建过程是什么样的,但看起来有人建议在MSDN论坛上使用MSBuild任务。

答案 1 :(得分:1)

我不确定这是@hbw所指的是什么时候他说:

  

...看起来有人建议在MSDN论坛上使用MSBuild任务

但是,我一直在使用的解决方案是:

  1. 使用Microsoft Enhanced Strong Naming文档底部的步骤,从完整snk文件(包含公钥和私钥的文件)密钥导出公钥单独的.snk文件。
    sn.exe -p FullKeyPair.snk PubKeySha256.snk sha256

  2. 使用 PubKeySha256.snk (在项目属性的Signing部分下)配置Visual Studio以对项目程序集进行延迟签名。

  3. 创建运行后的构建后事件(在项目属性的Build Events部分中):
    "<path to sn.exe>" -Ra "$(TargetPath)" "<path to FullKeyPair.snk>"

    例如,我的解决方案将这些密钥文件(以及sn.exe工具和相关文件)存储在名为&#34; Build Tools&#34;的目录中。直接在解决方案下。所以,我的构建后事件运行:
    "$(SolutionDir)Build Tools\sn.exe" -Ra "$(TargetPath)" "$(SolutionDir)Build Tools\FullKeyPair.snk"

  4. 如果你想像我一样将sn.exe工具复制到解决方案目录下(我推荐这个),你需要从SDK目录中复制以下文件:

    • SN.EXE
    • sn.exe.config
    • snrc.dll

    如果您不想这样做,那么您的项目/后期构建将依赖于您决定使用的SDK路径,这对于构建项目的所有开发人员都是相同的。您在该场景中的后期构建将类似于:

    SET SDKTools=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64
    
    "%SDKTools%\sn.exe" -Ra "$(TargetPath)" "$(ProjectDir)FullKeyPair.snk"