diff --git a/build.cmd b/build.cmd
index b4fee251cce..4079fb8d9e3 100644
--- a/build.cmd
+++ b/build.cmd
@@ -1,53 +1,143 @@
@echo off
-setlocal
+setlocal EnableDelayedExpansion
+
+:: Set the default arguments for build
+set __BuildArch=x64
+set __BuildType=Debug
+set __BuildOS=Windows_NT
+
+:: Default to highest Visual Studio version available
+set __VSVersion=vs2015
+
+:: Default to highest Visual Studio version available
+if defined VS120COMNTOOLS set __VSVersion=vs2013
+if defined VS140COMNTOOLS set __VSVersion=vs2015
+
+:: Set the various build properties here so that CMake and MSBuild can pick them up
+set "__ProjectDir=%~dp0"
+:: remove trailing slash
+if %__ProjectDir:~-1%==\ set "__ProjectDir=%__ProjectDir:~0,-1%"
+set "__SourceDir=%__ProjectDir%\src"
+set "__PackagesDir=%__ProjectDir%\packages"
+set "__RootBinDir=%__ProjectDir%\bin"
+set "__LogsDir=%__RootBinDir%\Logs"
+set __MSBCleanBuildArgs=
+set __SkipTestBuild=
+
+:Arg_Loop
+if "%1" == "" goto ArgsDone
+if /i "%1" == "/?" goto Usage
+
+if /i "%1" == "debug" (set __BuildType=Debug&shift&goto Arg_Loop)
+if /i "%1" == "release" (set __BuildType=Release&shift&goto Arg_Loop)
+
+if /i "%1" == "clean" (set __CleanBuild=1&shift&goto Arg_Loop)
+
+if /i "%1" == "skiptestbuild" (set __SkipTestBuild=1&shift&goto Arg_Loop)
+
+echo Invalid command line argument: %1
+goto Usage
+
+:ArgsDone
+
+echo Commencing CoreRT Repo build
+echo.
+
+:: Set the remaining variables based upon the determined build configuration
+set "__BinDir=%__RootBinDir%\Product\%__BuildOS%.%__BuildArch%.%__BuildType%"
+
+:: Configure environment if we are doing a clean build.
+if not defined __CleanBuild goto MakeDirs
+echo Doing a clean build
+echo.
+
+:: MSBuild projects would need a rebuild
+set __MSBCleanBuildArgs=/t:rebuild
+
+:: Cleanup the previous output for the selected configuration
+if exist "%__BinDir%" rd /s /q "%__BinDir%"
+if exist "%__IntermediatesDir%" rd /s /q "%__IntermediatesDir%"
+if exist "%__LogsDir%" del /f /q "%__LogsDir%\*_%__BuildOS%__%__BuildArch%__%__BuildType%.*"
+
+:MakeDirs
+if not exist "%__BinDir%" md "%__BinDir%"
+if not exist "%__LogsDir%" md "%__LogsDir%"
+
+:CheckPrereqs
+:: Check prerequisites
+echo Checking pre-requisites...
+echo.
+rem ******************************************
+rem PUT NATIVE BUILD PRE-REQUISITES CHECK HERE
+rem ******************************************
+
+:CheckVS
+
+set __VSProductVersion=
+if /i "%__VSVersion%" == "vs2013" set __VSProductVersion=120
+if /i "%__VSVersion%" == "vs2015" set __VSProductVersion=140
+
+
+:: Check presence of VS
+if defined VS%__VSProductVersion%COMNTOOLS goto CheckVSExistence
+echo Visual Studio 2013+ (Community is free) is a pre-requisite to build this repository.
+echo See: https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/developer-guide.md#prerequisites
+exit /b 1
+
+:CheckVSExistence
+:: Does VS 2013 or VS 2015 really exist?
+if exist "!VS%__VSProductVersion%COMNTOOLS!\..\IDE\devenv.exe" goto CheckMSBuild
+echo Visual Studio 2013+ (Community is free) is a pre-requisite to build this repository.
+echo See: https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/developer-guide.md#prerequisites
+exit /b 1
+
+:CheckMSBuild
:: Note: We've disabled node reuse because it causes file locking issues.
:: The issue is that we extend the build with our own targets which
:: means that that rebuilding cannot successfully delete the task
:: assembly.
+if /i "%__VSVersion%" =="vs2015" goto MSBuild14
+set _msbuildexe="%ProgramFiles(x86)%\MSBuild\12.0\Bin\MSBuild.exe"
+if not exist %_msbuildexe% set _msbuildexe="%ProgramFiles%\MSBuild\12.0\Bin\MSBuild.exe"
+if not exist %_msbuildexe% set _msbuildexe="%ProgramFiles(x86)%\MSBuild\14.0\Bin\MSBuild.exe"
+goto :CheckMSBuild14
+:MSBuild14
+set _msbuildexe="%ProgramFiles(x86)%\MSBuild\14.0\Bin\MSBuild.exe"
+:CheckMSBuild14
+if not exist %_msbuildexe% set _msbuildexe="%ProgramFiles%\MSBuild\14.0\Bin\MSBuild.exe"
+if not exist %_msbuildexe% echo Error: Could not find MSBuild.exe. Please see https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/developer-guide.md for build instructions. && exit /b 1
-if not defined VisualStudioVersion (
- if defined VS140COMNTOOLS (
- call "%VS140COMNTOOLS%\VsDevCmd.bat"
- goto :EnvSet
- )
+:: All set to commence the build
- if defined VS120COMNTOOLS (
- call "%VS120COMNTOOLS%\VsDevCmd.bat"
- goto :EnvSet
- )
-
- echo Error: build.cmd requires Visual Studio 2013 or 2015.
- echo Please see https://github.com/dotnet/corefx/blob/master/Documentation/project-docs/developer-guide.md for build instructions.
- exit /b 1
-)
-
-:EnvSet
+setlocal
+rem *********************
+rem PUT NATIVE BUILD HERE
+rem *********************
-:: Log build command line
-set _buildproj=%~dp0build.proj
-set _buildlog=%~dp0msbuild.log
-set _buildprefix=echo
-set _buildpostfix=^> "%_buildlog%"
-call :build %*
+:ManagedBuild
+REM endlocal to rid us of environment changes from vcvarsall.bat
+endlocal
-:: Build
-set _buildprefix=
-set _buildpostfix=
-call :build %*
+REM setlocal to prepare for vsdevcmd.bat
+setlocal
-goto :AfterBuild
+rem Explicitly set Platform causes conflicts in managed project files. Clear it to allow building from VS x64 Native Tools Command Prompt
+set Platform=
-:build
-%_buildprefix% msbuild "%_buildproj%" /nologo /maxcpucount /verbosity:minimal /nodeReuse:false /fileloggerparameters:Verbosity=normal;LogFile="%_buildlog%";Append %* %_buildpostfix%
-set BUILDERRORLEVEL=%ERRORLEVEL%
-goto :eof
+:: Set the environment for the managed build
+call "!VS%__VSProductVersion%COMNTOOLS!\VsDevCmd.bat"
+echo Commencing build of ILToNative for %__BuildOS%.%__BuildArch%.%__BuildType%
+echo.
+set "__ILToNativeBuildLog=%__LogsDir%\ILToNative_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
+%_msbuildexe% "%__ProjectDir%\build.proj" %__MSBCleanBuildArgs% /nologo /maxcpucount /verbosity:minimal /nodeReuse:false /fileloggerparameters:Verbosity=normal;LogFile="%__ILToNativeBuildLog%"
+IF NOT ERRORLEVEL 1 (
+ findstr /ir /c:".*Warning(s)" /c:".*Error(s)" /c:"Time Elapsed.*" "%__ILToNativeBuildLog%"
+ goto AfterILToNativeBuild
+)
+echo ILToNative build failed. Refer !__ILToNativeBuildLog! for details.
+exit /b 1
-:AfterBuild
-echo.
-:: Pull the build summary from the log file
-findstr /ir /c:".*Warning(s)" /c:".*Error(s)" /c:"Time Elapsed.*" "%_buildlog%"
-echo Build Exit Code = %BUILDERRORLEVEL%
+:AfterILToNativeBuild
-exit /b %BUILDERRORLEVEL%
\ No newline at end of file
diff --git a/build.proj b/build.proj
index 9a45c513480..715e68432c1 100644
--- a/build.proj
+++ b/build.proj
@@ -34,7 +34,7 @@
-
+
\ No newline at end of file
diff --git a/src/ILToNative/repro/repro.csproj b/src/ILToNative/repro/repro.csproj
index 34fba1f25ef..e0b4a18eb67 100644
--- a/src/ILToNative/repro/repro.csproj
+++ b/src/ILToNative/repro/repro.csproj
@@ -12,6 +12,7 @@
en-US
512
false
+ true
true
diff --git a/src/ILToNative/src/ILToNative.csproj b/src/ILToNative/src/ILToNative.csproj
index 3d7b29c7ad9..47450a2d4fa 100644
--- a/src/ILToNative/src/ILToNative.csproj
+++ b/src/ILToNative/src/ILToNative.csproj
@@ -12,6 +12,7 @@
512
false
true
+ true
true
diff --git a/src/ILToNative/src/project.json b/src/ILToNative/src/project.json
index 44decb8c817..d9dd5580e73 100644
--- a/src/ILToNative/src/project.json
+++ b/src/ILToNative/src/project.json
@@ -3,16 +3,16 @@
"System.Runtime": "4.0.20",
"System.Resources.ResourceManager": "4.0.0",
"System.Reflection.Primitives": "4.0.0",
- "System.Diagnostics.Debug": "4.0.0",
- "System.IO": "4.0.0",
+ "System.Diagnostics.Debug": "4.0.10",
+ "System.IO": "4.0.10",
"System.IO.FileSystem": "4.0.0",
- "System.Collections": "4.0.0",
- "System.Text.Encoding": "4.0.0",
- "System.Runtime.InteropServices": "4.0.10",
+ "System.Collections": "4.0.10",
+ "System.Text.Encoding": "4.0.10",
+ "System.Runtime.InteropServices": "4.0.20",
"System.Reflection": "4.0.0",
"System.Runtime.Extensions": "4.0.10",
- "System.Threading": "4.0.0",
- "System.Text.Encoding.Extensions": "4.0.0",
+ "System.Threading": "4.0.10",
+ "System.Text.Encoding.Extensions": "4.0.10",
"System.Reflection.Extensions": "4.0.0",
"System.Console": "4.0.0-beta-*",
"System.AppContext": "4.0.0",
@@ -20,6 +20,6 @@
"System.Reflection.Metadata": "1.0.22"
},
"frameworks": {
- "dnxcore50": {}
+ "dotnet": {}
}
}
\ No newline at end of file
diff --git a/src/TypeSystem.Ecma/src/TypeSystem.Ecma.csproj b/src/TypeSystem.Ecma/src/TypeSystem.Ecma.csproj
index de29f0d3198..4901fefeb32 100644
--- a/src/TypeSystem.Ecma/src/TypeSystem.Ecma.csproj
+++ b/src/TypeSystem.Ecma/src/TypeSystem.Ecma.csproj
@@ -12,6 +12,7 @@
en-US
512
false
+ true
true
diff --git a/src/TypeSystem.Ecma/src/project.json b/src/TypeSystem.Ecma/src/project.json
index cb9858b5891..96cd130e9f1 100644
--- a/src/TypeSystem.Ecma/src/project.json
+++ b/src/TypeSystem.Ecma/src/project.json
@@ -17,6 +17,6 @@
"System.Reflection.Metadata": "1.0.22"
},
"frameworks": {
- "dnxcore50": {}
+ "dotnet": {}
}
}
\ No newline at end of file
diff --git a/src/TypeSystem/src/TypeSystem.csproj b/src/TypeSystem/src/TypeSystem.csproj
index 55de7def758..d1785b53d60 100644
--- a/src/TypeSystem/src/TypeSystem.csproj
+++ b/src/TypeSystem/src/TypeSystem.csproj
@@ -12,6 +12,7 @@
512
false
true
+ true
true
diff --git a/src/TypeSystem/src/project.json b/src/TypeSystem/src/project.json
index a4815ef3124..5672802f953 100644
--- a/src/TypeSystem/src/project.json
+++ b/src/TypeSystem/src/project.json
@@ -16,6 +16,6 @@
"System.Reflection.Extensions": "4.0.0"
},
"frameworks": {
- "dnxcore50": {}
+ "dotnet": {}
}
}
\ No newline at end of file