diff --git a/.gitignore b/.gitignore
index 16994e0ab1..fb8092468e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -142,3 +142,5 @@ build/ui-docs.zip
build/csharp-docs.zip
build/msbuild.log
.vs/
+
+build/tools/
diff --git a/build/Build.bat b/build/Build.bat
index fc0d8a69ea..660cfa34be 100644
--- a/build/Build.bat
+++ b/build/Build.bat
@@ -49,10 +49,52 @@ REM This is necessary because SETLOCAL is on in InstallGit.cmd so that one might
REM but the path setting is lost due to SETLOCAL
path=C:\Program Files (x86)\Git\cmd;C:\Program Files\Git\cmd;%PATH%
+SET toolsFolder=%CD%\tools\
+IF NOT EXIST %toolsFolder% (
+ MD tools
+)
+
+SET nuGetExecutable=%CD%\tools\nuget.exe
+IF NOT EXIST %nuGetExecutable% (
+ ECHO Getting NuGet so we can fetch some tools
+ ECHO Downloading https://dist.nuget.org/win-x86-commandline/latest/nuget.exe to %nuGetExecutable%
+ powershell -Command "(New-Object Net.WebClient).DownloadFile('https://dist.nuget.org/win-x86-commandline/latest/nuget.exe', '%nuGetExecutable%')"
+)
+
+:: We need 7za.exe for BuildBelle.bat
+IF NOT EXIST %toolsFolder%7za.exe (
+ ECHO 7zip not found - fetching now
+ %nuGetExecutable% install 7-Zip.CommandLine -OutputDirectory %toolsFolder% -Verbosity quiet
+)
+
+:: We need 7za.exe for VS2017+
+IF NOT EXIST %toolsFolder%vswhere.exe (
+ ECHO vswhere not found - fetching now
+ %nuGetExecutable% install vswhere -OutputDirectory %toolsFolder% -Verbosity quiet
+)
+
+:: Put 7za.exe and vswhere.exe in a predictable path (not version specific)
+FOR /f "delims=" %%A in ('dir %toolsFolder%7-Zip.CommandLine.* /b') DO SET "sevenZipExePath=%toolsFolder%%%A\"
+MOVE %sevenZipExePath%tools\7za.exe %toolsFolder%7za.exe
+
+FOR /f "delims=" %%A in ('dir %toolsFolder%vswhere.* /b') DO SET "vswhereExePath=%toolsFolder%%%A\"
+MOVE %vswhereExePath%tools\vswhere.exe %toolsFolder%vswhere.exe
+
ECHO.
ECHO Making sure we have a web.config
IF NOT EXIST %CD%\..\src\Umbraco.Web.UI\web.config COPY %CD%\..\src\Umbraco.Web.UI\web.Template.config %CD%\..\src\Umbraco.Web.UI\web.config
+for /f "usebackq tokens=1* delims=: " %%i in (`%CD%\tools\vswhere.exe -latest -requires Microsoft.Component.MSBuild`) do (
+ if /i "%%i"=="installationPath" set InstallDir=%%j
+)
+
+SET VSWherePath="%InstallDir%\MSBuild"
+ECHO.
+ECHO Visual Studio is installed in: %InstallDir%
+
+SET MSBUILDPATH=C:\Program Files (x86)\MSBuild\14.0\Bin
+SET MSBUILD="%MSBUILDPATH%\MsBuild.exe"
+
ECHO.
ECHO.
ECHO Performing MSBuild and producing Umbraco binaries zip files
@@ -60,7 +102,7 @@ ECHO This takes a few minutes and logging is set to report warnings
ECHO and errors only so it might seems like nothing is happening for a while.
ECHO You can check the msbuild.log file for progress.
ECHO.
-%windir%\Microsoft.NET\Framework\v4.0.30319\msbuild.exe "Build.proj" /p:BUILD_RELEASE=%release% /p:BUILD_COMMENT=%comment% /p:NugetPackagesDirectory=%nuGetFolder% /consoleloggerparameters:Summary;ErrorsOnly;WarningsOnly /fileLogger
+%MSBUILD% "Build.proj" /p:BUILD_RELEASE=%release% /p:BUILD_COMMENT=%comment% /p:NugetPackagesDirectory=%nuGetFolder% /p:VSWherePath=%VSWherePath%
IF ERRORLEVEL 1 GOTO :error
ECHO.
diff --git a/build/BuildBelle.bat b/build/BuildBelle.bat
index 8a07ee380a..ae2d5ba8b5 100644
--- a/build/BuildBelle.bat
+++ b/build/BuildBelle.bat
@@ -1,33 +1,58 @@
@ECHO OFF
SETLOCAL
+ :: SETLOCAL is on, so changes to the path not persist to the actual user's path
-SET release=%1
-ECHO Installing Npm NuGet Package
-
-SET nuGetFolder=%CD%\..\src\packages\
-ECHO Configured packages folder: %nuGetFolder%
+SET toolsFolder=%CD%\tools\
ECHO Current folder: %CD%
-%CD%\..\src\.nuget\NuGet.exe install Npm.js -OutputDirectory %nuGetFolder% -Verbosity quiet
+SET nodeFileName=node-v6.9.1-win-x86.7z
+SET nodeExtractFolder=%toolsFolder%node.js.691
-for /f "delims=" %%A in ('dir %nuGetFolder%node.js.* /b') do set "nodePath=%nuGetFolder%%%A\"
-for /f "delims=" %%A in ('dir %nuGetFolder%npm.js.* /b') do set "npmPath=%nuGetFolder%%%A\tools\"
+IF NOT EXIST %nodeExtractFolder% (
+ ECHO Downloading http://nodejs.org/dist/v6.9.1/%nodeFileName% to %toolsFolder%%nodeFileName%
+ powershell -Command "(New-Object Net.WebClient).DownloadFile('http://nodejs.org/dist/v6.9.1/%nodeFileName%', '%toolsFolder%%nodeFileName%')"
+ ECHO Extracting %nodeFileName% to %nodeExtractFolder%
+ %toolsFolder%\7za.exe x %toolsFolder%\%nodeFileName% -o%nodeExtractFolder% -aos > nul
+)
+FOR /f "delims=" %%A in ('dir %nodeExtractFolder%\node* /b') DO SET "nodePath=%nodeExtractFolder%\%%A"
-ECHO Adding Npm and Node to path
-REM SETLOCAL is on, so changes to the path not persist to the actual user's path
-PATH=%npmPath%;%nodePath%;%PATH%
+SET nuGetExecutable=%CD%\tools\nuget.exe
+IF NOT EXIST %nuGetExecutable% (
+ ECHO Downloading https://dist.nuget.org/win-x86-commandline/latest/nuget.exe to %nuGetExecutable%
+ powershell -Command "(New-Object Net.WebClient).DownloadFile('https://dist.nuget.org/win-x86-commandline/latest/nuget.exe', '%nuGetExecutable%')"
+)
-SET buildFolder=%CD%
+SET drive=%CD:~0,2%
+SET nuGetFolder=%drive%\packages\
+FOR /f "delims=" %%A in ('dir %nuGetFolder%npm.* /b') DO SET "npmPath=%nuGetFolder%%%A\"
+IF [%npmPath%] == [] GOTO :installnpm
+IF NOT [%npmPath%] == [] GOTO :build
-ECHO Change directory to %CD%\..\src\Umbraco.Web.UI.Client\
-CD %CD%\..\src\Umbraco.Web.UI.Client\
+:installnpm
+ ECHO Downloading npm
+ ECHO Configured packages folder: %nuGetFolder%
+ ECHO Installing Npm NuGet Package
+ %nuGetExecutable% install Npm -OutputDirectory %nuGetFolder% -Verbosity detailed
+ REM Ensures that we look for the just downloaded NPM, not whatever the user has installed on their machine
+ FOR /f "delims=" %%A in ('dir %nuGetFolder%npm.* /b') DO SET "npmPath=%nuGetFolder%%%A\"
+ GOTO :build
-ECHO Do npm install and the grunt build of Belle
-call npm cache clean --quiet
-call npm install --quiet
-call npm install -g grunt-cli --quiet
-call npm install -g bower --quiet
-call grunt build --buildversion=%release%
+:build
+ ECHO Adding Npm and Node to path
+ REM SETLOCAL is on, so changes to the path not persist to the actual user's path
+ PATH=%npmPath%;%nodePath%;%PATH%
-ECHO Move back to the build folder
-CD %buildFolder%
\ No newline at end of file
+ SET buildFolder=%CD%
+
+ ECHO Change directory to %CD%\..\src\Umbraco.Web.UI.Client\
+ CD %CD%\..\src\Umbraco.Web.UI.Client\
+
+ ECHO Do npm install and the grunt build of Belle
+ call npm cache clean --quiet
+ call npm install --quiet
+ call npm install -g grunt-cli --quiet
+ call npm install -g bower --quiet
+ call grunt build --buildversion=%release%
+
+ ECHO Move back to the build folder
+ CD %buildFolder%
\ No newline at end of file
diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
index 54c8c2c59c..512cab02b1 100644
--- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
+++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
@@ -2435,14 +2435,31 @@ xcopy "$(ProjectDir)"..\packages\SqlServerCE.4.0.0.1\x86\*.* "$(TargetDir)x86\"
-
-
+
+ $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll
+
+
+ $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.Tasks.dll
+
+
+ $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.Tasks.dll
+
+
+ $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.Tasks.dll
+
+
+ $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v15.0\Web\Microsoft.Web.Publishing.Tasks.dll
+
+
+
+
+
diff --git a/src/umbraco.presentation.targets b/src/umbraco.presentation.targets
deleted file mode 100644
index 2a33705d6f..0000000000
--- a/src/umbraco.presentation.targets
+++ /dev/null
@@ -1,96 +0,0 @@
-
-
-
-
-
-
- $(MSBuildStartupDirectory)\..\src\
-
-
-
-
- $(SolutionDir)
- $(Computername).
-
-
-
- $(ProjectDir)
- $(WebProjectOutputDir)
- $(ProjDir)web.Template.$(ConfigEnvironment)$(Configuration).config
-
-
-
- $(ProjDir)web.Template.$(Configuration).config
-
-
-
- $(ProjDir)
-
-
-
- $(ProjOutputDir)\
-
-
-
-
-
-
-
-
- $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll
-
-
-
- $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.Tasks.dll
-
-
-
- $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.Tasks.dll
-
-
-
- $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.Tasks.dll
-
-
-
- $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v15.0\Web\Microsoft.Web.Publishing.Tasks.dll
-
-
-
-
-
-
-
-
-
-
-
- @(ConfigFiles)
- $(OriginalFileName.Replace("%(ConfigFiles.Extension)",".$(Configuration)%(ConfigFiles.Extension)"))
- $(OriginalFileName.Replace("$(ProjDir)", "$(ProjOutputDir)"))
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file