Fails to locate correct MSBuild when building database project using SSDT for VS 2017
Closed this issue · 4 comments
My team is migrating to gulp and we are trying to build database project on our build agent using SSDT tools for visual studio 2017. The agent is clean (no vs), only build tools and SSDT tools are installed:
Using the following gulp task:
var gulp = require('gulp');
var msbuild = require("gulp-msbuild");
gulp.task("DW-database-build", function () {
return gulp.src("../Database/Database.sqlproj")
.pipe(
msbuild({
targets: ['Clean', 'Build'],
toolsVersion: 15.0,
maxcpucount: 4,
verbosity: "quiet",
nodeReuse: false,
properties: {
Configuration: 'Release',
VisualStudioVersion: '15.0',
Platform: 'AnyCPU'
}
})
);
});
gulp uses msbuild located in BuilTools folder which fails to locate SSDT
Build started 25.9.2017 14:09:40.
0>Search paths being used for $(MSBuildExtensionsPath) are C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild;$(MSBuildProgramFiles32)\MSBuild
Trying to import C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\$(MSBuildToolsVersion)\Microsoft.Common.props using extensions path C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild
Property reassignment: $(MSBuildProjectExtensionsPath)="C:\TeamCity\buildAgent\work\DWX_CI\Database\obj\" (previous value: "obj\") at C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Microsoft.Common.props (58,5)
Search paths being used for $(MSBuildExtensionsPath) are C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild;$(MSBuildProgramFiles32)\MSBuild
Trying to import C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\$(MSBuildToolsVersion)\Imports\Microsoft.Common.props\ImportBefore\* using extensions path C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild
Search paths being used for $(MSBuildExtensionsPath) are C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild;$(MSBuildProgramFiles32)\MSBuild
Search paths being used for $(MSBuildExtensionsPath) are C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild;$(MSBuildProgramFiles32)\MSBuild
Search paths being used for $(MSBuildExtensionsPath) are C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild;$(MSBuildProgramFiles32)\MSBuild
Search paths being used for $(MSBuildExtensionsPath) are C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild;$(MSBuildProgramFiles32)\MSBuild
Trying to import C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets using extensions path C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild
Trying to import C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets using extensions path C:\Program Files (x86)\MSBuild
1>Project "C:\TeamCity\buildAgent\work\DWX_CI\Database\Database.sqlproj" on node 1 (Clean;Build target(s)).
1>Building with tools version "15.0".
1>C:\TeamCity\buildAgent\work\DWX_CI\Database\Database.sqlproj(66,57): error MSB4226: The imported project "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" was not found. Also, tried to find "Microsoft\VisualStudio\v15.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" in the fallback search path(s) for $(MSBuildExtensionsPath) - "C:\Program Files (x86)\MSBuild" . These search paths are defined in "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\amd64\MSBuild.exe.Config". Confirm that the path in the <Import> declaration is correct, and that the file exists on disk in one of the search paths.
1>Done Building Project "C:\TeamCity\buildAgent\work\DWX_CI\Database\Database.sqlproj" (Clean;Build target(s)) -- FAILED.
Build FAILED.
"C:\TeamCity\buildAgent\work\DWX_CI\Database\Database.sqlproj" (Clean;Build target) (1) ->
C:\TeamCity\buildAgent\work\DWX_CI\Database\Database.sqlproj(66,57): error MSB4226: The imported project "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" was not found. Also, tried to find "Microsoft\VisualStudio\v15.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" in the fallback search path(s) for $(MSBuildExtensionsPath) - "C:\Program Files (x86)\MSBuild" . These search paths are defined in "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\amd64\MSBuild.exe.Config". Confirm that the path in the <Import> declaration is correct, and that the file exists on disk in one of the search paths.
0 Warning(s)
1 Error(s)
Time Elapsed 00:00:00.30
The path "C:\Program Files (x86)\Microsoft Visual Studio\2017" contains two folders 'BuildTools' and 'SQL'. SQL folder was created by SSDT installer and as expected it contains SSDT tools. Manually using msbuild located in SQL folder correctly builds the database project.
Before migrating to gulp, we used grunt with grunt-msbuild plugin. Inernally it uses vswhere utility which correctly used msbuild from SQL folder.
I noticed that msbuild-finder.js only looks in
var possibleFolders = ['BuildTools', 'Enterprise', 'Professional', 'Community'];
Hi,
gulp-msbuild
also uses vswhere first and only falls back to the possibleFolders
if it doesn't find anything. (See here and here).
I've looked into grunt-msbuild and found that they are calling vswhere with some parameters.
Could you post the output of these two commands? Maybe it is resolved correctly with the parameters:
%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe
%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe -latest -products * -requires Microsoft.Component.MSBuild
Hi,
output:
- %ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe
Visual Studio Locator version 2.0.2 [query version 1.11.2331.64267]
Copyright (C) Microsoft Corporation. All rights reserved.
- %ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe -latest -products * -requires Microsoft.Component.MSBuild
Visual Studio Locator version 2.0.2 [query version 1.11.2331.64267]
Copyright (C) Microsoft Corporation. All rights reserved.instanceId: 7d2c474b
installDate: 20.9.2017
installationName: VisualStudio/15.3.5+26730.16
installationPath: C:\Program Files (x86)\Microsoft Visual Studio\2017\SQL
installationVersion: 15.3.26730.16
isPrerelease: 0
displayName: Microsoft SQL Server Data Tools for Visual Studio 2017
description: Microsoft SQL Server Data Tools for Visual Studio 2017
enginePath: C:\Program Files (x86)\Microsoft Visual Studio\Installer\resources\app\ServiceHub\Services\Microsoft.VisualStudio.Setup.Service
channelId: VisualStudio.15.Release
channelPath: C:\Users\svc_bts_build\AppData\Local\Microsoft\VisualStudio\Packages_Channels\4CB340F5\catalog.json
channelUri: https://aka.ms/vs/15/release/channel
releaseNotes: https://go.microsoft.com/fwlink/?LinkId=660469#15.3.26730.16
thirdPartyNotices: https://go.microsoft.com/fwlink/?LinkId=660485
Huh, thanks!
I will add these parameters 👍
Hi, i have published a new version with this fix.