0

我有一个 ClickOnce 应用程序,它依赖于延迟签名(使用 .pfx)程序集。我目前依靠我的项目的发布目标来创建我的 ClickOnce 部署,并希望尽可能保持这种方式(避免使用法师)。

我的问题是打包的程序集仍然延迟签名,因为发布运行时我没有机会运行“sn -Rc ...”。有没有办法在构建/重建后连接到 Publish 目标以签署我的程序集。如果发布没有触发构建,我也可以在发布之前对程序集进行签名。

有什么建议么?

我不确定如何寻求一些线索: - 在 .deploy 文件中签名程序集 - 重新使用发布目标生成的 .manifest 和 .application 文件来创建带有签名程序集的新部署

总而言之:如何重新使用(有或没有法师)发布目标生成的 .manifest/.application 来创建新部署?相同的文件,有些略有不同。

谢谢,伯努瓦

4

2 回答 2

1

只是好奇,你使用法师有什么问题?这就是它的设计目的,并且很容易重新签署您的部署。这是一篇文章,展示了如何做到这一点。

如果你不想使用 mage,你可以查看 Patterns and Practices 提供的 MMU 应用程序,在这里:你可以看一下代码;它以编程方式创建部署包。

Publish总是进行构建,您无法阻止它(许多人已经尝试过!)。

如果您想在创建发布包后将文件添加到部署中,请查看本页底部的“选项 2” 。IIRC,“自动”是指使用 MMU;手动意味着使用 Mage 或 MageUI。

于 2012-05-09T18:17:21.797 回答
0

我的问题是打包的程序集仍然延迟签名,因为发布运行时我没有机会运行“sn -Rc ...”。有没有办法在构建/重建后连接到 Publish 目标以签署我的程序集。

我在这方面已经很晚了,但我最近也遇到了这个问题,并设法将一个任务插入到 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>
于 2021-06-10T07:19:03.543 回答