如何在 Azure DevOps 中指定 signtool.exe 的位置?

How to specify location of signtool.exe in Azure DevOps?

在尝试使用 Visual Studio Build 任务签署从 Azure Devops 编译和发布的应用程序时,我收到以下错误消息:

An error occurred while signing: SignTool.exe was not found at path 
e:\<my app name>\(...)\signtool.exe. [e:\<my-project>\s\(...)\MyProjecName.csproj]

我查了一下,发现 SignTool.exe 在以下位置...

C:\Program Files (x86)\Microsoft SDKs\ClickOnce\SignTool

...但我不知道如何告诉 VS Build 任务在那里寻找它。

有没有什么方法可以让我通知构建任务正确的路径,或者有什么方法可以覆盖它?如果没有,我可能会考虑将 SignTool 复制到每个 运行 上的当前目录中,但这感觉像是一个肮脏的 hack。

我最终解决了这个问题,方法是使用 Powershell 脚本检查本地构建路径中是否存在 SignTool.exe,如果不存在则将其复制:

# Since MSBuild can't seem to access SignTool.exe from it's existing
# path, make a local copy (if none already exists):
$buildPath = "$(Build.Repository.LocalPath)"
$projPath = "$buildPath\MyProjectNameHere"
$pathToCheck = "$projPath\SignTool.exe"

$signToolPath = "C:\Program Files (x86)\Microsoft SDKs\ClickOnce\SignTool\SignTool.exe"

if(-not (test-path "$pathToCheck")){
    write-host "Copying SignTool to $pathToCheck"
    copy  "$signToolPath" "$projPath"
}

现在至少 MSBuild 会找到该工具并能够 运行 它。

我知道您解决了自己的问题,但我 运行 在自托管代理上使用 MSBuild 任务解决了同样的问题。发布这个以防我忘记我已经解决了这个问题时它对其他人或我有帮助。

This bug report帮我确定问题是使用x64架构引起的。将架构更改为 x86 解决了我的问题,而无需将可执行文件复制到构建文件夹。