因此,我执行了一些测试,试图跟踪在“Nuget 工具安装程序”Tfs 构建任务中使用不同版本的 NuGet 时会发生什么。对于基线,使用了 Tfs2018 (16.122.27102.1) 构建代理(服务类型),只需提取和配置。
配置构建代理后,您的代理目录中将有以下 NuGet.exe:
NuGet.exe 版本:3.3.0 (3.3.0.0212) - 注意:这是刚刚配置代理后,这里没有运行任何构建!
然后我开始设置将由代理 mulder 执行的构建定义。构建定义包含“NuGet Tool Installer”构建任务。我的第一次尝试是指定 NuGet 2.8.6,然后运行“NuGet Tool Installer”构建任务。
此任务完成后,我们会在构建代理文件夹中找到以下 NuGet.exe 工件:
- NuGetInstaller
- NuGetToolInstaller
- 以及我们请求的 NuGet 版本,在位置提供...\_tool\NuGet\2.8.6\x64\nuget.exe
从此时起,无论您指定哪个版本,...\_tasks\ 文件夹的内容对于 NuGet.exe 版本似乎都保持不变。
唯一明显的变化是,您在此位置选择的每个新版本都添加了...\_tool\NuGet\{版本请求}\x64\nuget.exe。
因此,如果我们在“NuGet Tool Installer”构建任务中煞费苦心地选择每个可能的版本并运行它,我们最终会得到如下所示的分布:
关于运行“NuGet Tool Installer”构建任务的代理产生的日志,突出的是在NuGet版本中每次切换后,都会出现以下消息:Prepending PATH environment variable。我假设目的是指向磁盘上选定的 NuGet.exe 版本。对于 2.8.6 版本,我们看到以下内容:
Prepending PATH environment variable with directory: C:\TfsBuild\mulder\_work\_tool\NuGet\2.8.6\x64
那么如果我们恢复到特定版本会发生什么?比如说从 v4.5.1 到 v2.8.6 - 它会清理一些版本吗?
不。它保留了所有内容,但会再次修改 PATH 变量以指向您恢复到的正确版本。
Prepending PATH environment variable with directory: C:\TfsBuild\mulder\_work\_tool\NuGet\2.8.6\x64
一个有趣的现象是您在 PATH 环境变量中看不到这些“Prepending”更改。
但是,如果您在调试中运行构建(通过将 system.debug 变量翻转为 true),您会看到一些有趣的细节。这一次,我可以看到变量确实滑到了现有 PATH 变量(在环境变量 GUI 中可见)的前面,最后还有 2 个。
调试日志如下所示:
Prepending PATH environment variable with directory: C:\TfsBuild\mulder\_work\_tool\NuGet\2.8.6\x64
new Path:
C:\TfsBuild\mulder\_work\_tool\NuGet\2.8.6\x64;
C:\TfsBuild\mulder\externals\git\cmd;
.
..
<The existing paths variables>
..
.
C:\TfsBuild\mulder\bin;
C:\TfsBuild\mulder\bin
因此,它似乎检索了现有的 PATH 环境变量,然后在运行构建时将“新”必需变量插入到它们前面。
显然,Tfs build 非常擅长确保手头始终有正确版本的 NuGet.exe,但清理旧版本并不是它的强项 :-)