我有一个AfterBuild
任务,通过NuGet包signtool.exe
使用MSBuild.ExtensionPack
签署dll
<MSBuild.ExtensionPack.Framework.CommandLine Command=""C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe" sign "/n" "MY CERTIFICATE" "/t" "http://timestamp.comodoca.com/authenticode" "$(TargetPath)."" Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " />
由于构建环境之间存在一些差异(某些远程构建代理具有不同版本的Visual Studio,因此Windows SDK),当代理安装了SDK 8.0版时,此任务将失败。
当且仅当任务失败时,是否可以触发不同的任务?
即。如果上述任务失败,请运行具有signtool.exe
答案 0 :(得分:1)
作为替代解决方案,我已经提出以下内容来检查可能的路径并使用找到的最新版本:
<PropertyGroup>
<SignToolPath Condition="'$(Configuration)' == 'Release' And '$(SignToolPath)' == '' And Exists('C:\Program Files (x86)\Windows Kits\8.1\bin\x64\signtool.exe')">C:\Program Files (x86)\Windows Kits\8.1\bin\x64\signtool.exe</SignToolPath>
<SignToolPath Condition="'$(Configuration)' == 'Release' And '$(SignToolPath)' == '' And Exists('C:\Program Files (x86)\Windows Kits\8.1\bin\x86\signtool.exe')">C:\Program Files (x86)\Windows Kits\8.1\bin\x86\signtool.exe</SignToolPath>
<SignToolPath Condition="'$(Configuration)' == 'Release' And '$(SignToolPath)' == '' And Exists('C:\Program Files (x86)\Windows Kits\8.0\bin\x64\signtool.exe')">C:\Program Files (x86)\Windows Kits\8.0\bin\x64\signtool.exe</SignToolPath>
<SignToolPath Condition="'$(Configuration)' == 'Release' And '$(SignToolPath)' == '' And Exists('C:\Program Files (x86)\Windows Kits\8.0\bin\x86\signtool.exe')">C:\Program Files (x86)\Windows Kits\8.0\bin\x86\signtool.exe</SignToolPath>
<SignToolPath Condition="'$(Configuration)' == 'Release' And '$(SignToolPath)' == '' And Exists('C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe')">C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe</SignToolPath>
<SignToolPath Condition="'$(Configuration)' == 'Release' And '$(SignToolPath)' == '' And Exists('C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\signtool.exe')">C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\signtool.exe</SignToolPath>
<SignToolPath Condition="'$(Configuration)' == 'Release' And '$(SignToolPath)' == '' And Exists('C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\signtool.exe')">C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\signtool.exe</SignToolPath>
<SignToolPath Condition="'$(Configuration)' == 'Release' And '$(SignToolPath)' == '' And Exists('C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\signtool.exe')">C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\signtool.exe</SignToolPath>
</PropertyGroup>
<Error Condition="'$(Configuration)' == 'Release' And '$(SignToolPath)' == ''" Text="Unable to determine signtool path" />
<MSBuild.ExtensionPack.Framework.CommandLine Command=""$(SignToolPath)" sign "/n" "MY CERTIFICATE" "/t" "http://timestamp.comodoca.com/authenticode" "$(TargetPath)."" Condition=" '$(Configuration)' == 'Release' " />
答案 1 :(得分:0)
您可以使用ContinueOnError="true"
标记您的任务,然后使用MSBuildLastTaskResult
保留属性来检查您的任务是否成功。
类似的东西:
<MSBuild.ExtensionPack.Framework.CommandLine
ContinueOnError="true"
Command="path_to_signtool.exe"
.... />
<MSBuild.ExtensionPack.Framework.CommandLine
Condition="'$(MSBuildLastTaskResult)' == 'False'"
Command="another_path_to_signtool.exe"
.... />