Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RichieBzzzt/35bc3290bd4d7e781c8ee24bf42588fe to your computer and use it in GitHub Desktop.
Save RichieBzzzt/35bc3290bd4d7e781c8ee24bf42588fe to your computer and use it in GitHub Desktop.
function Invoke-MsBuildSSDT {
<#
.SYNOPSIS
Build a datbase project/solution using Microsoft.Data.Tools.MSBuild
.DESCRIPTION
Using MSBUild, the database project/solution is comiled using Microsoft.Data.Tools.MSBuild. This can be downloaded by using Install-MicrosoftDataToolsMSBuild
.PARAMETER DatabaseSolutionFilePath
Mandatory - Filepath to the sln/sqlproj file.
.PARAMETER DataToolsFilePath
Mandatory - Location of the Micorosft.Data.Tools.MSBuild. Required for SSDTPath and ExtensionsReferences.
.PARAMETER MSBuildVersionNumber
Optional - Specify if using version 14 or 15. Will default to 15 if left blank. Can be installed by using Install-VSBuildTools2017.
.INPUTS
N/A
.OUTPUTS
N/A
.EXAMPLE
$sqlproj = $PSSCriptRoot\solution.sln
$workingFolder = $PSScriptRoot
New-Item -ItemType Directory -Force -Path $WorkingFolder
$msBuildDataTools = Join-Path $WorkingFolder "\Microsoft.Data.Tools.Msbuild\lib\net46"
if ((Test-Path $msBuildDataTools) -eq $false) {
Install-MicrosoftDataToolsMSBuild -WorkingFolder $workingFolder
}
if ((Test-Path $msBuildDataTools) -eq $false) {
Write-Output "Oh! It looks like MSBuildDataTools did not download."
}
Invoke-MsBuildSSDT -DatabaseSolutionFilePath $sqlproj -DataToolsFilePath $msBuildDataTools
if ($LASTEXITCODE -ne 0){
Throw
}
.NOTES
N/A
#>
param ( [string] $DatabaseSolutionFilePath
, [string] $DataToolsFilePath
, [string]$MSBuildVersionNumber)
if ([string]::IsNullOrEmpty($MSBuildVersionNumber)) {
$MSBuildVersionNumber = "15.0"
}
if ($MSBuildVersionNumber -eq "15.0") {
$filepath = "C:\Program Files (x86)\Microsoft Visual Studio\2017"
$folders = Get-ChildItem $filepath
$MsBuildInstalled = 0
foreach ($folder in $folders) {
$MsbuildPath = Join-Path $filepath "$folder\MSBuild\15.0\Bin"
if ((Test-Path $MsbuildPath) -eq $true) {
Write-Host "MsBuild found!" -ForegroundColor Green -BackgroundColor Yellow
$MsBuild = Join-Path $MsbuildPath "msbuild.exe"
$MsBuildInstalled = 1
break
}
}
if ($MsBuildInstalled -eq 0) {
Write-Error "Install Visual Studio Tools 2017 MSBuild Tools to continue!"
Throw
}
}
else {
$msbuild = "C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe"
}
if (-not (Test-Path $msbuild)) {
Write-Error "No MSBuild installed. Install Build Tools using 'Install-VsBuildTools2017', set -MSBuildVersionNumber to 15.0 and try again!"
Throw
}
$dacPacRootPath = "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE"
$arg1 = "/p:tv=$MSBuildVersionNumber"
$arg2 = "/p:SSDTPath=$DataToolsFilePath"
$arg3 = "/p:SQLDBExtensionsRefPath=$DataToolsFilePath"
$arg4 = "/p:Configuration=Debug"
$arg5 = "/p:dacPacRootPath=$dacPacRootPath"
Write-Host $msbuild $DatabaseSolutionFilePath $arg1 $arg2 $arg3 $arg4 $arg5 -ForegroundColor White -BackgroundColor DarkGreen
& $msbuild $DatabaseSolutionFilePath $arg1 $arg2 $arg3 $arg4 2>&1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment