如何告诉TeamCity / MS Build在哪里可以找到SignTool.exe?

问题描述

作为TeamCity下.Net应用程序构建过程的一部分,我们需要访问SignTool.exe来对程序进行签名。我已经可以通过将SignTool.exe的副本直接包含在相关项目的根文件夹中(例如,在Git存储库中包含SignTool.exe)来做到这一点,但这感觉很难看。解决方案。

我知道SignTool在服务器上,我也知道它的路径(C:\Program Files (x86)\Microsoft SDKs\ClickOnce\SignTool\signtool.exe),但是我还没有找到让构建过程发现它的方法

如果我尝试在不包含BuildTool.exe本地副本的情况下运行该版本,则会出现以下错误

签名时发生错误:在路径E:\ TC_build_agent_work \(...)找不到SignTool.exe

显然,这直接在build文件夹中查找程序,并且失败。

我找到了一些有关使用关键字SignToolPath向项目文件添加提示的信息,并对其进行了一些尝试,但均未成功。

我还试图在TeamCity中添加正确的路径作为环境变量,但是我不清楚这是否或应该如何工作。无论如何,这对我的构建没有影响。

如何添加TeamCity(或MS Build?)并在正确的位置查找SignTool.exe的方式添加路径?

解决方法

我将扩展Windows环境变量“ Path”以包括SignTool.exe的路径。实际上,其他工具(docker,nodejs,dotnet,powershell等)也可以做到这一点

set PATH=%PATH%;C:\Program Files (x86)\Microsoft SDKs\ClickOnce\SignTool

请注意,您必须在更改Path变量后重新启动TeamCity或代理。

或者,您可以使用TeamCity Build参数来扩展Path env变量,该变量仅在构建期间适用,而无需重新启动(与将工具添加到git存储库一样难看)。

TeamCity BuildConfiguration Parameters

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...