visual-studio - 使用增量构建对文件 MSBuild 进行签名
问题描述
我正在使用以下内容对我的输出 dll 进行签名。
问题是这使得每次构建完成时都会运行签名,这会杀死增量构建。
我尝试使用Inputs="$(TargetPath)" Outputs="$(TargetPath)"
,但这根本不运行签名任务。
一种可能的解决方案是编译到不同的文件夹中,然后通过签名进行复制,这使得这更加麻烦。
有没有更简单的?
<Target Name="Sign" AfterTargets="Build">
<Exec Command="signtool sign /f "$(SolutionDir)my.pfx" /p password /t http://timestamp.verisign.com/scripts/timstamp.dll "$(TargetPath)"" />
</Target>
解决方案
此 MSBuild 配置片段将使用 signtool 对输出程序集进行签名,并为发布配置添加时间戳,假设 .NET Framework 的版本足够新,可以使用 Roslyn。
每次编译时,Roslyn 都会触发“SignExe”目标。
<PropertyGroup>
<TargetsTriggeredByCompilation>
SignExe
</TargetsTriggeredByCompilation>
</PropertyGroup>
<Target Name="SignExe">
<PropertyGroup>
<CodeSignThumbprint>SHA1CERTTHUMBPRINTHERE</CodeSignThumbprint>
</PropertyGroup>
<SignFile SigningTarget="@(IntermediateAssembly)" CertificateThumbprint="$(CodeSignThumbprint)" TargetFrameworkVersion="$(TargetFrameworkVersion)" TimestampUrl="http://timestamp.verisign.com/scripts/timstamp.dll" Condition="'$(Configuration)' == 'Release'"></SignFile>
<SignFile SigningTarget="@(IntermediateAssembly)" CertificateThumbprint="$(CodeSignThumbprint)" TargetFrameworkVersion="$(TargetFrameworkVersion)" Condition="'$(Configuration)' != 'Release'"></SignFile>
</Target>
推荐阅读
- kubernetes - 使用 NetworkPolicy 将“kube-system”命名空间列入白名单
- python - 在 For 循环中重试单次迭代 (Python)
- python - 无法在 Photoshop 中设置艺术图层类型
- css - 仅为 JavaFX treeTableView 中的一级节点设置样式类
- django - Django-Machina 论坛面板未显示在 wagtail 管理面板中
- javascript - 什么是舞台点画布?
- docker - 在同一台服务器上扩展虚拟机/容器有什么意义?
- javascript - 我应该手动将 JS 异常发送到 Google Analytics 吗?
- python-3.x - 在python3中解码字节消息
- mysql - MySQL:复合索引与多个索引(最左边的索引前缀)