我有一个依赖于延迟签名(带.pfx)程序集的ClickOnce应用程序。我目前依赖项目的Publish目标来创建我的ClickOnce部署,并希望尽可能保持这种方式(避免法师)。
我的问题是打包的程序集仍然是延迟签名的,因为在发布运行时我没有机会运行“sn -Rc ...”。有没有办法在构建/重建后挂钩到Publish目标以对程序集进行签名。如果发布没有触发构建,我也可以在发布之前签署程序集。
有什么建议吗?
有些线索我不确定如何追求: - 在.deploy文件中签署程序集 - 重新使用发布目标生成的.manifest和.application文件来创建带有签名程序集的新部署
总结:如何重新使用(使用或不使用mage)发布目标生成的.manifest / .application来创建新部署?相同的文件,有些略有不同。
谢谢, 贝努瓦
答案 0 :(得分:1)
好奇,使用法师你有什么问题?这就是它的设计目标,并且很容易重新签署您的部署。 Here is an article showing how to do that.
如果您不想使用法师,可以查看模式和实践提供的MMU应用程序,它是here:您可以查看代码;它以编程方式创建部署包。
发布始终进行构建,没有什么可以阻止它(许多人已经尝试过!)。
如果要在创建发布包后向部署中添加文件,请查看this page底部的“选项2”。 IIRC,“自动”是指使用MMU;手动意味着使用Mage或MageUI。
答案 1 :(得分:0)
我的问题是打包的程序集仍然延迟签名,因为在发布运行时我没有机会运行“sn -Rc ...”。有没有办法在构建/重建后挂钩到发布目标以对我的程序集进行签名。
我在这方面已经很晚了,但我最近也遇到了这个问题,并设法将一个任务插入到 MSBuild 中,该任务在构建任务之后直接对程序集(而不是清单)进行了完全签名。所以辞职是在发布之前完成的。
我将引用下面 .targets 文件的相关行:
<PropertyGroup Label="ProjectInfo">
<AssemblyExtension Condition="'$(OutputType)' == 'Library'">.dll</AssemblyExtension>
<AssemblyExtension Condition="'$(OutputType)' == 'WinExe'">.exe</AssemblyExtension>
<AssemblyExtension Condition="'$(OutputType)' == 'Exe'">.exe</AssemblyExtension>
</PropertyGroup>
<PropertyGroup Label="Signing">
<!-- the build server keeps the private key a secret; the path to the key file also containing
the private key is injected via build server environment -->
<StrongNameKeyFile>$(STRONG_NAME_KEY)</StrongNameKeyFile>
<IsBuildServer>$(BUILDSRV)</IsBuildServer>
</PropertyGroup>
<Target Name="Hook_AfterBuild" AfterTargets="AfterBuild">
</Target>
<!-- Fully sign the delay signed assembly on the build server -->
<Target Name="FullySignAssembly" AfterTargets="Hook_AfterBuild"
Condition=" '$(IsBuildServer)' == 'true' And '$(DelaySign)' == 'true' And '$(SignAssembly)' == 'true' ">
<Exec Command="sn.exe -Ra $(OutputPath)$(AssemblyName)$(AssemblyExtension) $(StrongNameKeyFile)"/>
</Target>