我正在测试增强型强命名(http://msdn.microsoft.com/en-us/library/hh415055.aspx)并在将其置于构建过程中时遇到一些问题。根据文章,您必须首先对组件进行延迟签名,然后重新签名以获得正确的增强型字符串名称。这对构建过程不起作用。通常我们在开发时延迟签名程序集,并在构建服务器上完全签名。有没有人有增强强命名的经验?
答案 0 :(得分:1)
目前,您无法在编译时使用增强型强名称对程序集进行完全签名,因为C#编译器不支持使用增强型强名称进行签名。因此,要解决此限制,您必须在编译时延迟签名,然后使用sn.exe工具完全签名。
我不确定您的特定构建过程是什么样的,但看起来有人建议在MSDN论坛上使用MSBuild任务。
答案 1 :(得分:1)
我不确定这是@hbw所指的是什么时候他说:
...看起来有人建议在MSDN论坛上使用MSBuild任务
但是,我一直在使用的解决方案是:
使用Microsoft Enhanced Strong Naming文档底部的步骤,从完整snk文件(包含公钥和私钥的文件)密钥导出公钥单独的.snk文件。
sn.exe -p FullKeyPair.snk PubKeySha256.snk sha256
使用 PubKeySha256.snk (在项目属性的Signing
部分下)配置Visual Studio以对项目程序集进行延迟签名。
创建运行后的构建后事件(在项目属性的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"
如果你想像我一样将sn.exe工具复制到解决方案目录下(我推荐这个),你需要从SDK目录中复制以下文件:
如果您不想这样做,那么您的项目/后期构建将依赖于您决定使用的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"