TFS 2017迁移后某.sln未实际构建,bin\Release文件夹为空
TFS 2017构建任务迁移后SLN未实际构建,Bin/Release为空的问题
我将一个TFS 2017构建任务迁移(重建)至另一个项目后,发现其中一个.sln文件未被实际构建,构建步骤完成后bin\Release文件夹为空。
构建执行的MSBuild命令
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\msbuild.exe" "C:\TFS2017_Builld_Agent2\_work\1\s\CorePlatform\ScannerService\PGScannerService.sln" /nologo /nr:false /dl:CentralLogger,"C:\TFS2017_Builld_Agent2\_work\_tasks\MSBuild_c6c4c611-aa2e-4a33-b606-5eaba2196824\1.119.0\ps_modules\MSBuildHelpers\Microsoft.TeamFoundation.DistributedTask.MSBuild.Logger.dll";"RootDetailId=|SolutionDir=C:\TFS2017_Builld_Agent2\_work\1\s\CorePlatform\ScannerService"*ForwardingLogger,"C:\TFS2017_Builld_Agent2\_work\_tasks\MSBuild_c6c4c611-aa2e-4a33-b606-5eaba2196824\1.119.0\ps_modules\MSBuildHelpers\Microsoft.TeamFoundation.DistributedTask.MSBuild.Logger.dll" /p:platform="x86" /p:configuration="Release" /p:_MSDeployUserAgent="TFS_e143528a-7a2f-41eb-b587-1d8ceb3e1fa8_build_136_8275"
奇怪的现象
- 在命令提示符中直接执行该命令时,
Release文件夹能正常生成内容 - 通过TFS构建执行相同命令却无法生成文件,但构建步骤显示执行成功
完整构建日志(截断部分)
2018-05-24T17:49:22.9911639Z ##[section]Starting: Build solution PGScannerService.sln 2018-05-24T17:49:23.0161664Z ============================================================================== 2018-05-24T17:49:23.0161664Z Task : MSBuild 2018-05-24T17:49:23.0171665Z Description : Build with MSBuild 2018-05-24T17:49:23.0171665Z Version : 1.119.0 2018-05-24T17:49:23.0171665Z Author : Microsoft Corporation 2018-05-24T17:49:23.0171665Z Help : [More Information](https://go.microsoft.com/fwlink/?LinkID=613724) 2018-05-24T17:49:23.0171665Z ============================================================================== 2018-05-24T17:49:33.5172164Z ##[command]"C:\TFS2017_Builld_Agent2\_work\_tasks\MSBuild_c6c4c611-aa2e-4a33-b606-5eaba2196824\1.119.0\ps_modules\MSBuildHelpers\vswhere.exe" -version [15.0,16.0) -latest -format json 2018-05-24T17:49:33.9122559Z ##[command]"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\msbuild.exe" "C:\TFS2017_Builld_Agent2\_work\1\s\CorePlatform\ScannerService\PGScannerService.sln" /nologo /nr:false /dl:CentralLogger,"C:\TFS2017_Builld_Agent2\_work\_tasks\MSBuild_c6c4c611-aa2e-4a33-b606-5eaba2196824\1.119.0\ps_modules\MSBuildHelpers\Microsoft.TeamFoundation.DistributedTask.MSBuild.Logger.dll";"RootDetailId=|SolutionDir=C:\TFS2017_Builld_Agent2\_work\1\s\CorePlatform\ScannerService"*ForwardingLogger,"C:\TFS2017_Builld_Agent2\_work\_tasks\MSBuild_c6c4c611-aa2e-4a33-b606-5eaba2196824\1.119.0\ps_modules\MSBuildHelpers\Microsoft.TeamFoundation.DistributedTask.MSBuild.Logger.dll" /p:platform="x86" /p:configuration="Release" /p:_MSDeployUserAgent="TFS_e143528a-7a2f-41eb-b587-1d8ceb3e1fa8_build_136_8275" 2018-05-24T17:49:34.7263373Z Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch. 2018-05-24T17:49:34.8713518Z Build started 5/24/2018 10:49:34 AM. 2018-05-24T17:49:35.1863833Z Project "C:\TFS2017_Builld_Agent2\_work\1\s\CorePlatform\ScannerService\PGScannerService.sln" on node 1 (default targets). 2018-05-24T17:49:35.1873834Z ValidateSolutionConfiguration: 2018-05-24T17:49:35.1883835Z Building solution configuration "Release|x86". 2018-05-24T17:49:35.4464093Z Project "C:\TFS2017_Builld_Agent2\_work\1\s\CorePlatform\ScannerService\PGScannerService.sln" (1) is building "C:\TFS2017_Builld_Agent2\_work\1\s\CorePlatform\ScannerService\ScannerService\ScannerApp.csproj" (2) on node 1 (default targets). 2018-05-24T17:49:35.4464093Z RestorePackages: 2018-05-24T17:49:35.4464093Z "C:\TFS2017_Builld_Agent2\_work\1\s\CorePlatform\ScannerService\.nuget\NuGet.exe" install "C:\TFS2017_Builld_Agent2\_work\1\s\CorePlatform\ScannerService\ScannerService\packages.config" -source "" -NonInteractive -RequireConsent -solutionDir "C:\TFS2017_Builld_Agent2\_work\1\s\CorePlatform\ScannerService\ " 2018-05-24T17:49:38.0566703Z Restoring NuGet packages... 2018-05-24T17:49:38.0566703Z To prevent NuGet from downloading packages during build, open the Visual Studio Options dialog, click on the NuGet Package Manager node and uncheck 'Allow NuGet to download missing packages'. 2018-05-24T17:49:38.1916838Z Feeds used: 2018-05-24T17:49:38.1916838Z https://api.nuget.org/v3/index.json 2018-05-24T17:49:38.1916838Z C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\ 2018-05-24T17:49:38.1926839Z 2018-05-24T17:49:38.2006847Z All packages listed in C:\TFS2017_Builld_Agent2\_work\1\s\CorePlatform\ScannerService\ScannerService\packages.config are already installed. 2018-05-24T17:49:38.3426989Z PrepareForBuild: 2018-05-24T17:49:38.3426989Z Creating directory "bin\x86\Release\". 2018-05-24T17:49:38.3476994Z Creat
问题分析与解决方案
这种本地执行正常但TFS构建失败的情况,通常和构建上下文差异或者MSBuild日志截断/目标未完全执行有关,结合你的日志和现象,我整理了几个排查方向:
1. 检查构建日志是否完整
你的日志最后截断在Creat,这说明TFS可能没有捕获到完整的MSBuild输出。建议:
- 在TFS构建任务的MSBuild步骤中,开启详细日志级别(设置为
Diagnostic),这样能看到完整的构建过程,包括是否有隐藏的警告/错误,或者目标是否中途停止。 - 查看构建代理的本地日志文件(通常在
C:\TFS2017_Builld_Agent2\_work\_logs目录下),那里可能保存了未在TFS界面显示的完整输出。
2. 验证TFS构建代理的权限与上下文
本地命令行是用你的用户身份执行,而TFS构建代理是用服务账户运行的,两者权限和环境变量可能不同:
- 检查构建代理服务账户是否对
C:\TFS2017_Builld_Agent2\_work目录有读写权限,尤其是生成输出的bin\x86\Release路径。 - 确认代理账户能访问NuGet源(虽然日志显示包已安装,但如果是权限问题可能导致后续步骤失败)。
- 对比本地和代理的环境变量,比如
PATH、MSBuildSDKsPath等,确保代理的环境能正确加载VS 2017的相关组件。
3. 检查SLN文件的项目构建配置
迁移项目后,SLN的构建配置可能出现不一致:
- 打开
PGScannerService.sln,进入配置管理器,确认Release|x86配置下,ScannerApp.csproj的构建选项是勾选状态。有时候迁移后配置会被重置,导致项目被跳过。 - 检查项目文件(
.csproj)中的OutputPath是否正确,是否有条件判断导致在TFS环境下输出到了其他路径(比如obj目录或者其他自定义路径)。
4. 排查MSBuild目标的差异
TFS的MSBuild命令添加了TFS专用的日志器(CentralLogger和ForwardingLogger),虽然理论上不影响构建,但偶尔会出现兼容性问题:
- 尝试在TFS构建任务中,临时移除日志器参数(或者使用更简单的MSBuild命令),看是否能正常构建。
- 或者在本地命令行中添加相同的日志器参数,模拟TFS的执行环境,看是否能复现问题。
5. 清理构建缓存
TFS构建可能残留了旧的缓存文件,导致构建异常:
- 在构建任务中添加一个清理工作目录的步骤,确保每次构建都是干净的。
- 手动清理代理工作目录下的
obj和bin文件夹,然后重新触发构建。
内容的提问来源于stack exchange,提问作者Ben_G
相关产品推荐
相关产品推荐

