diff --git a/build-vsix.cmd b/build-vsix.cmd new file mode 100644 index 0000000000..2b67caa48c --- /dev/null +++ b/build-vsix.cmd @@ -0,0 +1,2 @@ +@ECHO OFF +PowerShell -NoProfile -NoLogo -ExecutionPolicy unrestricted -Command "[System.Threading.Thread]::CurrentThread.CurrentCulture = ''; [System.Threading.Thread]::CurrentThread.CurrentUICulture = '';& '%~dp0build-vsix.ps1' %*; exit $LASTEXITCODE" diff --git a/build-vsix.ps1 b/build-vsix.ps1 new file mode 100644 index 0000000000..8ad4e603b4 --- /dev/null +++ b/build-vsix.ps1 @@ -0,0 +1,84 @@ +#requires -version 4 +param( + [string]$MSBuildPath, + [string]$Configuration='Debug', + [string]$VsixName='Microsoft.VisualStudio.RazorExtension.vsix' +) +$ErrorActionPreference='Stop' +######################## +# Helpers +######################## + +function exec($cmd) { + $cmdName = [IO.Path]::GetFileName($cmd) + Write-Host -ForegroundColor Cyan "> $cmdName $args" + & $cmd @args + $exitCode = $LASTEXITCODE + if($exitCode -ne 0) { + throw "'$cmdName $args' failed with exit code: $exitCode" + } +} + +function Get-BuildConfiguration { + if ($env:Configuration) { + return $env:Configuration + } + return $Configuration +} + +function Get-MSBuildPath { + if ($MSBuildPath) { + return $MSBuildPath + } + + $vsDir=$ENV:VSINSTALLDIR + if (!($vsDir)) { + $vsDir = Join-Path ${ENV:ProgramFiles(x86)} 'Microsoft Visual Studio/2017*/*' + } + + $msbuild = Get-ChildItem $(Join-Path $vsDir 'MSBuild/15.0/bin/MSBuild.exe') + + if (!($msbuild) -or ($msbuild | Measure-Object).Count -ne 1) { + throw "MSBuild 15.0 could not be located automatically in '$vsDir'. Use -MSBuildPath to specify its location." + } + + return $msbuild +} + +######################## +# Variables +######################## + +$intermediateDir = Join-Path $PSScriptRoot 'obj' +$nugetExePath = Join-Path $intermediateDir 'nuget.exe' +$artifactsDir = Join-Path $PSScriptRoot 'artifacts' +$buildDir = Join-Path $artifactsDir 'build' +$vsixPath = Join-Path $buildDir $VsixName +$msbuildDir = Join-Path $artifactsDir 'msbuild' +$logPath = Join-Path $msbuildDir 'vsix-msbuild.log' +$vsixCsproj = Join-Path $PSScriptRoot 'tooling/Microsoft.VisualStudio.RazorExtension/Microsoft.VisualStudio.RazorExtension.csproj' +$msbuild = Get-MSBuildPath +$config = Get-BuildConfiguration + +######################## +# Main +######################## + +exec .\build.ps1 initialize + +mkdir $buildDir -ErrorAction Ignore | out-null +mkdir $msbuildDir -ErrorAction Ignore | out-null +mkdir $intermediateDir -ErrorAction Ignore | out-null + +if (!(Test-Path $nugetExePath)) +{ + Invoke-WebRequest "https://dist.nuget.org/win-x86-commandline/v4.0.0-rc4/NuGet.exe" -OutFile "$nugetExePath" +} + +exec $nugetExePath restore $vsixCsproj -SolutionDirectory $PSScriptRoot -Verbosity quiet +exec $msbuild $vsixCsproj ` + /v:m ` + /p:DeployExtension=false ` + /fl "/flp:v=D;LogFile=$logPath" ` + /p:TargetVsixContainer=$vsixPath ` + /p:Configuration=$config diff --git a/build/repo.targets b/build/repo.targets index 57082f61c7..9976ca808d 100644 --- a/build/repo.targets +++ b/build/repo.targets @@ -1,8 +1,12 @@ + Configuration=$(Configuration)NoVSIX - \ No newline at end of file + diff --git a/makefile.shade b/makefile.shade deleted file mode 100644 index 3a7b1a288c..0000000000 --- a/makefile.shade +++ /dev/null @@ -1,42 +0,0 @@ - -var VERSION='0.1' -var FULL_VERSION='0.1' -use-standard-lifecycle -k-standard-goals - -#restore-nuget-packages target='initialize' if='!IsLinux' - exec program='${Path.Combine(Directory.GetCurrentDirectory(), ".build", "nuget.exe")}' commandline='restore' - -#build-vsix-core - @{ - var programFilesx86 = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86); - // Microsoft Visual Studio\2017 - var buildToolsDirectory = Path.Combine(programFilesx86, "Microsoft Visual Studio", "2017"); - if (!Directory.Exists(buildToolsDirectory)) - { - throw new Exception("MSBuild 15.0 installation directory could not be located."); - } - - var msBuildDirectory = Directory.EnumerateDirectories(buildToolsDirectory).FirstOrDefault(); - // If VS 2017 is installed, look for MSBuild under Enterprise \ Professional \ Community directory - // If the MSBuild tools are separately installed, look for MSBuild under the BuildTools directory - if (msBuildDirectory == null) - { - throw new Exception("MSBuild 15.0 installation directory could not be located."); - } - - var msbuildPath = Path.Combine(msBuildDirectory, "MSBuild", "15.0", "bin", "MSBuild.exe"); - var toolsDirectory = Path.Combine(Directory.GetCurrentDirectory(), "tooling", "Microsoft.VisualStudio.RazorExtension"); - var artifactsDirectory = Path.Combine(Directory.GetCurrentDirectory(), "artifacts"); - Directory.CreateDirectory(artifactsDirectory); - var logFilePath = Path.Combine(artifactsDirectory, "msbuild.log"); - } - exec program='${msbuildPath}' commandline='/p:DeployExtension=false /fl /flp:v=D /flp:LogFile=${logFilePath}' workingdir='${toolsDirectory}' - -#build-vsix .initialize .compile .build-vsix-core - @{ - var baseDirectory = Directory.GetCurrentDirectory(); - var buildPath = Path.Combine(baseDirectory, "artifacts", "build"); - var vsixPath = Directory.EnumerateFiles(baseDirectory, "*.vsix", SearchOption.AllDirectories).First(); - File.Copy(vsixPath, Path.Combine(buildPath, Path.GetFileName(vsixPath))); - }