Propagate errors during build to the Azure DevOps timeline (dotnet/coreclr#25977)
authorElinor Fung <47805090+elinor-fung@users.noreply.github.com>
Mon, 5 Aug 2019 23:20:45 +0000 (16:20 -0700)
committerGitHub <noreply@github.com>
Mon, 5 Aug 2019 23:20:45 +0000 (16:20 -0700)
* Use Arcade MSBuild scripts
* Remove bin clash logger from build-test scripts
* Remove setting RestoreSources in optdata.csproj and rely on repo's NuGet.config

Commit migrated from https://github.com/dotnet/coreclr/commit/929da85bce4fd3f2794b957497daca4a522be2d8

src/coreclr/build-test.cmd
src/coreclr/build-test.sh
src/coreclr/build.cmd
src/coreclr/build.sh
src/coreclr/src/.nuget/optdata/optdata.csproj

index e07c926..fc2d5fa 100644 (file)
@@ -7,6 +7,12 @@ set "__MsgPrefix=BUILDTEST: "
 
 echo %__MsgPrefix%Starting Build at %TIME%
 
+REM Set variables used when running in an Azure DevOps task
+if defined TF_BUILD (
+    set __ArcadeScriptArgs="-ci"
+    set __ErrMsgPrefix=##vso[task.logissue type=error]
+)
+
 set __ThisScriptDir="%~dp0"
 
 call "%__ThisScriptDir%"\setup_vs_tools.cmd
@@ -181,7 +187,7 @@ REM ============================================================================
 
 call "%__TestDir%\setup-stress-dependencies.cmd" /arch %__BuildArch% /outputdir %__BinDir%
 if errorlevel 1 (
-    echo %__MsgPrefix%Error: setup-stress-dependencies failed.
+    echo %__ErrMsgPrefix%%__MsgPrefix%Error: setup-stress-dependencies failed.
     goto     :Exit_Failure
 )
 @if defined _echo @echo on
@@ -207,7 +213,7 @@ call                                 "%__VCToolsRoot%\vcvarsall.bat" %__VCBuildA
 @if defined _echo @echo on
 
 if not defined VSINSTALLDIR (
-    echo %__MsgPrefix%Error: VSINSTALLDIR variable not defined.
+    echo %__ErrMsgPrefix%%__MsgPrefix%Error: VSINSTALLDIR variable not defined.
     exit /b 1
 )
 if not exist "%VSINSTALLDIR%DIA SDK" goto NoDIA
@@ -219,7 +225,7 @@ call "%__SourceDir%\pal\tools\gen-buildsys-win.bat" ""%__ProjectFilesDir%"" %__V
 popd
 
 if not exist "%__NativeTestIntermediatesDir%\install.vcxproj" (
-    echo %__MsgPrefix%Failed to generate test native component build project!
+    echo %__ErrMsgPrefix%%__MsgPrefix%Failed to generate test native component build project!
     exit /b 1
 )
 
@@ -233,13 +239,12 @@ set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
 set __Logging=!__MsbuildLog! !__MsbuildWrn! !__MsbuildErr!
 
 call "%__ProjectDir%\cmake_msbuild.cmd" /nologo /verbosity:minimal /clp:Summary /nodeReuse:false^
-  /l:BinClashLogger,Tools/net46/Microsoft.DotNet.Build.Tasks.dll;LogFile=binclash.log^
   /p:RestoreDefaultOptimizationDataPackage=false /p:PortableBuild=true^
   /p:UsePartialNGENOptimization=false /maxcpucount^
   "%__NativeTestIntermediatesDir%\install.vcxproj"^
   !__Logging! /p:Configuration=%__BuildType% /p:Platform=%__BuildArch% %__CommonMSBuildArgs% %__PriorityArg% %__UnprocessedBuildArgs%
 if errorlevel 1 (
-    echo %__MsgPrefix%Error: build failed. Refer to the build log files for details:
+    echo %__ErrMsgPrefix%%__MsgPrefix%Error: native test build failed. Refer to the build log files for details.
     echo     %__BuildLog%
     echo     %__BuildWrn%
     echo     %__BuildErr%
@@ -270,12 +275,12 @@ set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
 set __Logging=!__MsbuildLog! !__MsbuildWrn! !__MsbuildErr!
 
-call "%__ProjectDir%\dotnet.cmd" msbuild /nologo /verbosity:minimal /clp:Summary /nodeReuse:false^
-  /l:BinClashLogger,Tools/Microsoft.DotNet.Build.Tasks.dll;LogFile=binclash.log^
+REM Disable warnAsError - coreclr issue 19922
+powershell -NoProfile -ExecutionPolicy ByPass -NoLogo -Command "%__ProjectDir%\eng\common\msbuild.ps1" %__ArcadeScriptArgs%^
+  %__ProjectDir%\tests\build.proj -warnAsError:0 /t:BatchRestorePackages /nodeReuse:false^
   /p:RestoreDefaultOptimizationDataPackage=false /p:PortableBuild=true^
   /p:UsePartialNGENOptimization=false /maxcpucount^
-  %__ProjectDir%\tests\build.proj /t:BatchRestorePackages^
-  !__Logging! %__CommonMSBuildArgs% %__PriorityArg% %__UnprocessedBuildArgs%
+  '!__Logging!' %__CommonMSBuildArgs% %__PriorityArg% %__UnprocessedBuildArgs%
 
 :SkipRestoreProduct
 
@@ -290,7 +295,7 @@ if defined __SkipManaged goto SkipManagedBuild
 echo %__MsgPrefix%Starting the Managed Tests Build
 
 if not defined VSINSTALLDIR (
-    echo %__MsgPrefix%Error: build-test.cmd should be run from a Visual Studio Command Prompt.  Please see https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/developer-guide.md for build instructions.
+    echo %__ErrMsgPrefix%%__MsgPrefix%Error: build-test.cmd should be run from a Visual Studio Command Prompt.  Please see https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/developer-guide.md for build instructions.
     exit /b 1
 )
 set __AppendToLog=false
@@ -314,14 +319,17 @@ for /l %%G in (1, 1, %__NumberOfTestGroups%) do (
     set __MsbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%";Append=!__AppendToLog!
     set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%";Append=!__AppendToLog!
     set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%";Append=!__AppendToLog!
+    set __Logging=!__MsbuildLog! !__MsbuildWrn! !__MsbuildErr!
 
     set __TestGroupToBuild=%%G
     echo Running: msbuild %__ProjectDir%\tests\build.proj !__MsbuildLog! !__MsbuildWrn! !__MsbuildErr! %TargetsWindowsMsbuildArg% %__msbuildArgs% !__PriorityArg! %__UnprocessedBuildArgs%
 
-    call "%__ProjectDir%\dotnet.cmd" msbuild %__ProjectDir%\tests\build.proj !__MsbuildLog! !__MsbuildWrn! !__MsbuildErr! %TargetsWindowsMsbuildArg% %__msbuildArgs% !__PriorityArg! %__UnprocessedBuildArgs%
+    REM Disable warnAsError - coreclr issue 19922
+    powershell -NoProfile -ExecutionPolicy ByPass -NoLogo -Command "%__ProjectDir%\eng\common\msbuild.ps1" %__ArcadeScriptArgs%^
+        %__ProjectDir%\tests\build.proj -warnAsError:0 '!__Logging!' %TargetsWindowsMsbuildArg% %__msbuildArgs% !__PriorityArg! '%__UnprocessedBuildArgs%'
 
     if errorlevel 1 (
-        echo %__MsgPrefix%Error: build failed. Refer to the build log files for details:
+        echo %__ErrMsgPrefix%%__MsgPrefix%Error: managed test build failed. Refer to the build log files for details:
         echo     %__BuildLog%
         echo     %__BuildWrn%
         echo     %__BuildErr%
@@ -340,9 +348,10 @@ REM Check that we've built about as many tests as we expect. This is primarily i
 REM drastically fewer Pri-1 tests than expected.
 echo %__MsgPrefix%Check the managed tests build
 echo Running: dotnet msbuild %__ProjectDir%\tests\runtest.proj /t:CheckTestBuild /p:CLRTestPriorityToBuild=%__Priority% %__msbuildArgs% %__unprocessedBuildArgs%
-call "%__ProjectDir%\dotnet.cmd" msbuild %__ProjectDir%\tests\runtest.proj /t:CheckTestBuild /p:CLRTestPriorityToBuild=%__Priority% %__msbuildArgs% %__unprocessedBuildArgs%
+powershell -NoProfile -ExecutionPolicy ByPass -NoLogo -File "%__ProjectDir%\eng\common\msbuild.ps1" %__ArcadeScriptArgs%^
+    %__ProjectDir%\tests\runtest.proj /t:CheckTestBuild /p:CLRTestPriorityToBuild=%__Priority% %__msbuildArgs% %__unprocessedBuildArgs%
 if errorlevel 1 (
-    echo %__MsgPrefix%Error: build failed.
+    echo %__ErrMsgPrefix%%__MsgPrefix%Error: Check Test Build failed.
     exit /b 1
 )
 
@@ -390,14 +399,13 @@ set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
 set __Logging=!__MsbuildLog! !__MsbuildWrn! !__MsbuildErr!
 
-call %__ProjectDir%\dotnet.cmd msbuild /nologo /verbosity:minimal /clp:Summary /nodeReuse:false^
-  /l:BinClashLogger,Tools/Microsoft.DotNet.Build.Tasks.dll;LogFile=binclash.log^
+powershell -NoProfile -ExecutionPolicy ByPass -NoLogo -File "%__ProjectDir%\eng\common\msbuild.ps1" %__ArcadeScriptArgs%^
+  %__ProjectDir%\tests\runtest.proj /t:CreateTestOverlay /nodeReuse:false^
   /p:RestoreDefaultOptimizationDataPackage=false /p:PortableBuild=true^
   /p:UsePartialNGENOptimization=false /maxcpucount^
-  %__ProjectDir%\tests\runtest.proj /t:CreateTestOverlay^
   !__Logging! %__CommonMSBuildArgs% %RuntimeIdArg% %__PriorityArg% %__UnprocessedBuildArgs%
 if errorlevel 1 (
-    echo %__MsgPrefix%Error: build failed. Refer to the build log files for details:
+    echo %__ErrMsgPrefix%%__MsgPrefix%Error: Create Test Overlay failed. Refer to the build log files for details:
     echo     %__BuildLog%
     echo     %__BuildWrn%
     echo     %__BuildErr%
@@ -424,14 +432,13 @@ set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
 set __Logging=!__MsbuildLog! !__MsbuildWrn! !__MsbuildErr!
 
-call %__ProjectDir%\dotnet.cmd msbuild /nologo /verbosity:minimal /clp:Summary /nodeReuse:false^
-  /l:BinClashLogger,Tools/Microsoft.DotNet.Build.Tasks.dll;LogFile=binclash.log^
+powershell -NoProfile -ExecutionPolicy ByPass -NoLogo -File "%__ProjectDir%\eng\common\msbuild.ps1" %__ArcadeScriptArgs%^
+  %__ProjectDir%\tests\runtest.proj /t:CreateTestHost /nodeReuse:false^
   /p:RestoreDefaultOptimizationDataPackage=false /p:PortableBuild=true^
   /p:UsePartialNGENOptimization=false /maxcpucount^
-  %__ProjectDir%\tests\runtest.proj /t:CreateTestHost^
   !__Logging! %__CommonMSBuildArgs% %RuntimeIdArg% %__PriorityArg% %__UnprocessedBuildArgs%
 if errorlevel 1 (
-    echo %__MsgPrefix%Error: build failed. Refer to the build log files for details:
+    echo %__ErrMsgPrefix%%__MsgPrefix%Error: Create Test Host failed. Refer to the build log files for details:
     echo     %__BuildLog%
     echo     %__BuildWrn%
     echo     %__BuildErr%
@@ -460,7 +467,7 @@ set __Logging=!__MsbuildLog! !__MsbuildWrn! !__MsbuildErr!
 REM Build wrappers using the local SDK's msbuild. As we move to arcade, the other builds should be moved away from run.exe as well.
 call "%__ProjectDir%\dotnet.cmd" msbuild %__ProjectDir%\tests\runtest.proj /p:RestoreAdditionalProjectSources=https://dotnet.myget.org/F/dotnet-core/  /p:BuildWrappers=true !__Logging! %__msbuildArgs% %TargetsWindowsMsbuildArg% %__UnprocessedBuildArgs%
 if errorlevel 1 (
-    echo %__MsgPrefix%Error: Xunit wrapper build failed. Refer to the build log files for details:
+    echo %__ErrMsgPrefix%%__MsgPrefix%Error: XUnit wrapper build failed. Refer to the build log files for details:
     echo     %__BuildLog%
     echo     %__BuildWrn%
     echo     %__BuildErr%
@@ -589,7 +596,7 @@ if %__exitCode% neq 0 (
 REM Delete original .dll & replace it with the Crossgened .dll
 del %1
 ren "%CORE_ROOT%\temp.ni.dll" %2
-    
+
 echo Successfully precompiled %2
 exit /b 0
 
index 65703d5..0f38999 100755 (executable)
@@ -67,7 +67,7 @@ build_test_wrappers()
         eval $nextCommand
 
         if [ $? -ne 0 ]; then
-            echo "${__MsgPrefix}Error: build failed. Refer to the build log files for details (above)"
+            echo "${__ErrMsgPrefix}${__MsgPrefix}Error: XUnit wrapper build failed. Refer to the build log files for details (above)"
             exit 1
         else
             echo "XUnit Wrappers have been built."
@@ -160,7 +160,7 @@ generate_layout()
         echo "Resolve runtime dependences via $nextCommand"
         eval $nextCommand
         if [ $? != 0 ]; then
-            echo "${__MsgPrefix}Error: setup-stress-dependencies failed."
+            echo "${__ErrMsgPrefix}${__MsgPrefix}Error: setup-stress-dependencies failed."
             exit 1
         fi
     fi
@@ -324,7 +324,7 @@ build_Tests()
         build_native_projects "$__BuildArch" "${__NativeTestIntermediatesDir}"
 
         if [ $? -ne 0 ]; then
-            echo "${__MsgPrefix}Error: build failed. Refer to the build log files for details (above)"
+            echo "${__ErrMsgPrefix}${__MsgPrefix}Error: native test build failed. Refer to the build log files for details (above)"
             exit 1
         fi
     fi
@@ -335,7 +335,7 @@ build_Tests()
         build_MSBuild_projects "Tests_Managed" "$__ProjectDir/tests/build.proj" "Managed tests build (build tests)" "$__up"
 
         if [ $? -ne 0 ]; then
-            echo "${__MsgPrefix}Error: build failed. Refer to the build log files for details (above)"
+            echo "${__ErrMsgPrefix}${__MsgPrefix}Error: managed test build failed. Refer to the build log files for details (above)"
             exit 1
         else
             echo "Checking the Managed Tests Build..."
@@ -343,7 +343,7 @@ build_Tests()
             build_MSBuild_projects "Check_Test_Build" "${__ProjectDir}/tests/runtest.proj" "Check Test Build" "/t:CheckTestBuild"
 
             if [ $? -ne 0 ]; then
-                echo "${__MsgPrefix}Error: Check Test Build failed."
+                echo "${__ErrMsgPrefix}${__MsgPrefix}Error: Check Test Build failed."
                 exit 1
             fi
         fi
@@ -376,13 +376,6 @@ build_MSBuild_projects()
     __BuildWrn="$__LogsDir/${__BuildLogRootName}.${__BuildOS}.${__BuildArch}.${__BuildType}.wrn"
     __BuildErr="$__LogsDir/${__BuildLogRootName}.${__BuildOS}.${__BuildArch}.${__BuildType}.err"
 
-    # Use binclashlogger by default if no other logger is specified
-    if [[ "${extraBuildParameters[*]}" == *"/l:"* ]]; then
-        __msbuildEventLogging=
-    else
-        __msbuildEventLogging="/l:BinClashLogger,Tools/Microsoft.DotNet.Build.Tasks.dll\;LogFile=binclash.log"
-    fi
-
     if [[ "$subDirectoryName" == "Tests_Managed" ]]; then
         # Execute msbuild managed test build in stages - workaround for excessive data retention in MSBuild ConfigCache
         # See https://github.com/Microsoft/msbuild/issues/2993
@@ -407,23 +400,23 @@ build_MSBuild_projects()
             export __TestGroupToBuild=$testGroupToBuild
 
             # Generate build command
-            buildArgs=("/nologo" "/verbosity:minimal" "/clp:Summary")
+            buildArgs=("$projectName")
             buildArgs+=("/p:RestoreDefaultOptimizationDataPackage=false" "/p:PortableBuild=true")
             buildArgs+=("/p:UsePartialNGENOptimization=false" "/maxcpucount")
 
-            buildArgs+=("$projectName" "${__msbuildLog}" "${__msbuildWrn}" "${__msbuildErr}")
-            buildArgs+=("$__msbuildEventLogging")
+            buildArgs+=("${__msbuildLog}" "${__msbuildWrn}" "${__msbuildErr}")
             buildArgs+=("${extraBuildParameters[@]}")
             buildArgs+=("${__CommonMSBuildArgs[@]}")
             buildArgs+=("${__UnprocessedBuildArgs[@]}")
 
-            nextCommand="\"$__ProjectRoot/dotnet.sh\" msbuild ${buildArgs[@]}"
+            # Disable warnAsError - coreclr issue 19922
+            nextCommand="\"$__ProjectRoot/eng/common/msbuild.sh\" $__ArcadeScriptArgs --warnAsError false ${buildArgs[@]}"
             echo "Building step '$stepName' testGroupToBuild=$testGroupToBuild via $nextCommand"
             eval $nextCommand
 
             # Make sure everything is OK
             if [ $? -ne 0 ]; then
-                echo "${__MsgPrefix}Failed to build $stepName. See the build logs:"
+                echo "${__ErrMsgPrefix}${__MsgPrefix}Failed to build $stepName. See the build logs:"
                 echo "    $__BuildLog"
                 echo "    $__BuildWrn"
                 echo "    $__BuildErr"
@@ -439,23 +432,23 @@ build_MSBuild_projects()
         __msbuildErr="\"/flp2:ErrorsOnly;LogFile=${__BuildErr}\""
 
         # Generate build command
-        buildArgs=("/nologo" "/verbosity:minimal" "/clp:Summary")
+        buildArgs=("$projectName")
         buildArgs+=("/p:RestoreDefaultOptimizationDataPackage=false" "/p:PortableBuild=true")
         buildArgs+=("/p:UsePartialNGENOptimization=false" "/maxcpucount")
 
-        buildArgs+=("$projectName" "${__msbuildLog}" "${__msbuildWrn}" "${__msbuildErr}")
-        buildArgs+=("$__msbuildEventLogging")
+        buildArgs+=("${__msbuildLog}" "${__msbuildWrn}" "${__msbuildErr}")
         buildArgs+=("${extraBuildParameters[@]}")
         buildArgs+=("${__CommonMSBuildArgs[@]}")
         buildArgs+=("${__UnprocessedBuildArgs[@]}")
 
-        nextCommand="\"$__ProjectRoot/dotnet.sh\" msbuild ${buildArgs[@]}"
+        # Disable warnAsError - coreclr issue 19922
+        nextCommand="\"$__ProjectRoot/eng/common/msbuild.sh\" $__ArcadeScriptArgs --warnAsError false ${buildArgs[@]}"
         echo "Building step '$stepName' via $nextCommand"
         eval $nextCommand
 
         # Make sure everything is OK
         if [ $? -ne 0 ]; then
-            echo "${__MsgPrefix}Failed to build $stepName. See the build logs:"
+            echo "${__ErrMsgPrefix}${__MsgPrefix}Failed to build $stepName. See the build logs:"
             echo "    $__BuildLog"
             echo "    $__BuildWrn"
             echo "    $__BuildErr"
@@ -499,7 +492,7 @@ build_native_projects()
                                                  /p:ArcadeBuild=true /t:GenerateNativeVersionFile /restore \
                                                  $__CommonMSBuildArgs $__UnprocessedBuildArgs
             if [ $? -ne 0 ]; then
-                echo "Failed to generate native version file."
+                echo "${__ErrMsgPrefix}Failed to generate native version file."
                 exit $?
             fi
         else
@@ -528,7 +521,7 @@ build_native_projects()
     fi
 
     if [ ! -f "$intermediatesForBuild/$buildFile" ]; then
-        echo "Failed to generate $message build project!"
+        echo "${__ErrMsgPrefix}Failed to generate $message build project!"
         exit 1
     fi
 
@@ -544,7 +537,7 @@ build_native_projects()
 
     $buildTool install -j $__NumProc
     if [ $? != 0 ]; then
-        echo "Failed to build $message."
+        echo "${__ErrMsgPrefix}Failed to build $message."
         exit 1
     fi
 
@@ -663,6 +656,12 @@ case $OSName in
         ;;
 esac
 
+# Set variables used when running in an Azure DevOps task
+if [[ ! -z $TF_BUILD ]]; then
+  __ArcadeScriptArgs="--ci"
+  __ErrMsgPrefix="##vso[task.logissue type=error]"
+fi
+
 __BuildType=Debug
 __CodeCoverage=
 __IncludeTests=INCLUDE_TESTS
index 94f1f13..9399a66 100644 (file)
@@ -7,6 +7,12 @@ set "__MsgPrefix=BUILD: "
 
 echo %__MsgPrefix%Starting Build at %TIME%
 
+REM Set variables used when running in an Azure DevOps task
+if defined TF_BUILD (
+    set __ArcadeScriptArgs="-ci"
+    set __ErrMsgPrefix=##vso[task.logissue type=error]
+)
+
 set __ThisScriptFull="%~f0"
 set __ThisScriptDir="%~dp0"
 
@@ -361,12 +367,12 @@ REM ============================================================================
 
 @if defined _echo @echo on
 
-powershell -NoProfile -ExecutionPolicy ByPass -NoLogo -File "%__ProjectDir%\eng\common\msbuild.ps1"^
+powershell -NoProfile -ExecutionPolicy ByPass -NoLogo -File "%__ProjectDir%\eng\common\msbuild.ps1" %__ArcadeScriptArgs%^
     %__ProjectDir%\eng\empty.csproj /p:NativeVersionFile="%__RootBinDir%\obj\_version.h"^
     /p:ArcadeBuild=true /t:GenerateNativeVersionFile /restore^
     %__CommonMSBuildArgs% %__UnprocessedBuildArgs%
 if not !errorlevel! == 0 (
-    echo %__MsgPrefix%Error: Failed to generate version headers.
+    echo %__ErrMsgPrefix%%__MsgPrefix%Error: Failed to generate version headers.
     exit /b !errorlevel!
 )
 
@@ -379,13 +385,12 @@ REM ============================================================================
 set OptDataProjectFilePath=%__ProjectDir%\src\.nuget\optdata\optdata.csproj
 if %__RestoreOptData% EQU 1 (
     echo %__MsgPrefix%Restoring the OptimizationData Package
-    call %__ProjectDir%\dotnet.cmd restore /nologo /verbosity:minimal^
-      /nodeReuse:false /maxcpucount^
-      %OptDataProjectFilePath%^
-      %__CommonMSBuildArgs% %__UnprocessedBuildArgs%
+    powershell -NoProfile -ExecutionPolicy ByPass -NoLogo -File "%__ProjectDir%\eng\common\msbuild.ps1" %__ArcadeScriptArgs%^
+        %OptDataProjectFilePath% /t:Restore^
+        %__CommonMSBuildArgs% %__UnprocessedBuildArgs%
     if not !errorlevel! == 0 (
-        echo %__MsgPrefix%Error: Failed to restore the optimization data package.
-        exit /b 1
+        echo %__ErrMsgPrefix%%__MsgPrefix%Error: Failed to restore the optimization data package.
+        exit /b !errorlevel!
     )
 )
 
@@ -393,28 +398,30 @@ set PgoDataPackageVersionOutputFile="%__IntermediatesDir%\optdataversion.txt"
 set IbcDataPackageVersionOutputFile="%__IntermediatesDir%\ibcoptdataversion.txt"
 
 REM Parse the optdata package versions out of msbuild so that we can pass them on to CMake
-call "%__ProjectDir%\dotnet.cmd" msbuild "%OptDataProjectFilePath%" /t:DumpPgoDataPackageVersion /nologo %__CommonMSBuildArgs% /p:PgoDataPackageVersionOutputFile="!PgoDataPackageVersionOutputFile!"
+powershell -NoProfile -ExecutionPolicy ByPass -NoLogo -File "%__ProjectDir%\eng\common\msbuild.ps1" %__ArcadeScriptArgs%^
+    "%OptDataProjectFilePath%" /t:DumpPgoDataPackageVersion %__CommonMSBuildArgs% /p:PgoDataPackageVersionOutputFile="!PgoDataPackageVersionOutputFile!"
 
  if not !errorlevel! == 0 (
-    echo "Failed to get PGO data package version."
+    echo %__ErrMsgPrefix%Failed to get PGO data package version.
     exit /b !errorlevel!
 )
 if not exist "!PgoDataPackageVersionOutputFile!" (
-    echo "Failed to get PGO data package version."
+    echo %__ErrMsgPrefix%Failed to get PGO data package version.
     exit /b 1
 )
 
 set /p __PgoOptDataVersion=<"!PgoDataPackageVersionOutputFile!"
 
-call "%__ProjectDir%\dotnet.cmd" msbuild "%OptDataProjectFilePath%" /t:DumpIbcDataPackageVersion /nologo %__CommonMSBuildArgs% /p:IbcDataPackageVersionOutputFile="!IbcDataPackageVersionOutputFile!"
+powershell -NoProfile -ExecutionPolicy ByPass -NoLogo -File "%__ProjectDir%\eng\common\msbuild.ps1" %__ArcadeScriptArgs%^
+    "%OptDataProjectFilePath%" /t:DumpIbcDataPackageVersion /nologo %__CommonMSBuildArgs% /p:IbcDataPackageVersionOutputFile="!IbcDataPackageVersionOutputFile!"
 
  if not !errorlevel! == 0 (
-    echo "Failed to get IBC data package version."
+    echo %__ErrMsgPrefix%Failed to get IBC data package version.
     exit /b !errorlevel!
 )
 
 if not exist "!IbcDataPackageVersionOutputFile!" (
-    echo "Failed to get IBC data package version."
+    echo %__ErrMsgPrefix%Failed to get IBC data package version.
     exit /b 1
 )
 
@@ -436,7 +443,7 @@ set _C=
 set /p PYTHON=<%TEMP%\pythonlocation.txt
 
 if NOT DEFINED PYTHON (
-    echo %__MsgPrefix%Error: Could not find a python installation
+    echo %__ErrMsgPrefix%%__MsgPrefix%Error: Could not find a python installation
     exit /b 1
 )
 
@@ -478,7 +485,7 @@ if %__BuildCrossArchNative% EQU 1 (
 
 :SkipConfigureCrossBuild
     if not exist "%__CrossCompIntermediatesDir%\install.vcxproj" (
-        echo %__MsgPrefix%Error: failed to generate cross-arch components build project!
+        echo %__ErrMsgPrefix%%__MsgPrefix%Error: failed to generate cross-arch components build project!
         exit /b 1
     )
 
@@ -499,11 +506,11 @@ if %__BuildCrossArchNative% EQU 1 (
       !__Logging! /p:Configuration=%__BuildType% /p:Platform=%__CrossArch% %__CommonMSBuildArgs% %__UnprocessedBuildArgs%
 
     if not !errorlevel! == 0 (
-        echo %__MsgPrefix%Error: cross-arch components build failed. Refer to the build log files for details:
+        echo %__ErrMsgPrefix%%__MsgPrefix%Error: cross-arch components build failed. Refer to the build log files for details.
         echo     !__BuildLog!
         echo     !__BuildWrn!
         echo     !__BuildErr!
-        exit /b 1
+        exit /b !errorlevel!
     )
 
 :SkipCrossCompBuild
@@ -545,7 +552,7 @@ if %__BuildNative% EQU 1 (
     @if defined _echo @echo on
 
     if not defined VSINSTALLDIR (
-        echo %__MsgPrefix%Error: VSINSTALLDIR variable not defined.
+        echo %__ErrMsgPrefix%%__MsgPrefix%Error: VSINSTALLDIR variable not defined.
         exit /b 1
     )
     if not exist "!VSINSTALLDIR!DIA SDK" goto NoDIA
@@ -564,7 +571,7 @@ if %__BuildNative% EQU 1 (
 
 :SkipConfigure
     if not exist "%__IntermediatesDir%\install.vcxproj" (
-        echo %__MsgPrefix%Error: failed to generate native component build project!
+        echo %__ErrMsgPrefix%%__MsgPrefix%Error: failed to generate native component build project!
         exit /b 1
     )
 
@@ -584,11 +591,11 @@ if %__BuildNative% EQU 1 (
       !__Logging! /p:Configuration=%__BuildType% /p:Platform=%__BuildArch% %__CommonMSBuildArgs% %__UnprocessedBuildArgs%
 
     if not !errorlevel! == 0 (
-        echo %__MsgPrefix%Error: native component build failed. Refer to the build log files for details:
+        echo %__ErrMsgPrefix%%__MsgPrefix%Error: native component build failed. Refer to the build log files for details.
         echo     !__BuildLog!
         echo     !__BuildWrn!
         echo     !__BuildErr!
-        exit /b 1
+        exit /b !errorlevel!
     )
 
 :SkipNativeBuild
@@ -626,45 +633,47 @@ if %__BuildCoreLib% EQU 1 (
         set __MsbuildErr=/flp2:ErrorsOnly;LogFile=!__BuildErr!
         set __Logging=!__MsbuildLog! !__MsbuildWrn! !__MsbuildErr!
 
-        call %__ProjectDir%\dotnet.cmd restore /nologo /verbosity:minimal /clp:Summary /nodeReuse:false^
-          /p:PortableBuild=true /maxcpucount /p:IncludeRestoreOnlyProjects=true /p:ArcadeBuild=true^
-          %__ProjectDir%\src\build.proj^
-          !__Logging! %__CommonMSBuildArgs% !__ExtraBuildArgs! %__UnprocessedBuildArgs%
+        powershell -NoProfile -ExecutionPolicy ByPass -NoLogo -File "%__ProjectDir%\eng\common\msbuild.ps1" %__ArcadeScriptArgs%^
+            %__ProjectDir%\src\build.proj /t:Restore^
+            /nodeReuse:false /p:PortableBuild=true /maxcpucount /p:IncludeRestoreOnlyProjects=true /p:ArcadeBuild=true^
+            !__Logging! %__CommonMSBuildArgs% !__ExtraBuildArgs! %__UnprocessedBuildArgs%
         if not !errorlevel! == 0 (
-            echo %__MsgPrefix%Error: Managed Product assemblies restore failed. Refer to the build log files for details:
+            echo %__ErrMsgPrefix%%__MsgPrefix%Error: Managed Product assemblies restore failed. Refer to the build log files for details.
             echo     !__BuildLog!
             echo     !__BuildWrn!
             echo     !__BuildErr!
-            exit /b 1
+            exit /b !errorlevel!
         )
 
-        call %__ProjectDir%\dotnet.cmd msbuild /nologo /verbosity:minimal /clp:Summary /nodeReuse:false^
-          /p:PortableBuild=true /maxcpucount /p:ArcadeBuild=true^
-          %__ProjectDir%\src\build.proj^
-          !__Logging! %__CommonMSBuildArgs% !__ExtraBuildArgs! %__UnprocessedBuildArgs%
+        REM Disable warnAsError to work around VS bug (948084) where ucrt lib path is not set properly, resulting in CS1668
+        powershell -NoProfile -ExecutionPolicy ByPass -NoLogo -Command "%__ProjectDir%\eng\common\msbuild.ps1" %__ArcadeScriptArgs%^
+            %__ProjectDir%\src\build.proj -warnAsError:0^
+            /nodeReuse:false /p:PortableBuild=true /maxcpucount /p:ArcadeBuild=true^
+            '!__Logging!' %__CommonMSBuildArgs% !__ExtraBuildArgs! %__UnprocessedBuildArgs%
         if not !errorlevel! == 0 (
-            echo %__MsgPrefix%Error: Managed Product assemblies build failed. Refer to the build log files for details:
+            echo %__ErrMsgPrefix%%__MsgPrefix%Error: Managed Product assemblies build failed. Refer to the build log files for details.
             echo     !__BuildLog!
             echo     !__BuildWrn!
             echo     !__BuildErr!
-            exit /b 1
+            exit /b !errorlevel!
         )
     )
     if %__IbcOptimize% EQU 1 (
         echo %__MsgPrefix%Commencing IBCMerge of System.Private.CoreLib for %__BuildOS%.%__BuildArch%.%__BuildType%
         set IbcMergeProjectFilePath=%__ProjectDir%\src\.nuget\optdata\ibcmerge.csproj
         set IbcMergePackageVersionOutputFile="%__IntermediatesDir%\ibcmergeversion.txt"
-        call "%__ProjectDir%\dotnet.cmd" msbuild "!IbcMergeProjectFilePath!" /t:DumpIbcMergePackageVersion /nologo %__CommonMSBuildArgs% /p:IbcMergePackageVersionOutputFile="!IbcMergePackageVersionOutputFile!"
+        powershell -NoProfile -ExecutionPolicy ByPass -NoLogo -File "%__ProjectDir%\eng\common\msbuild.ps1" %__ArcadeScriptArgs%^
+            "!IbcMergeProjectFilePath!" /t:DumpIbcMergePackageVersion /nologo %__CommonMSBuildArgs% /p:IbcMergePackageVersionOutputFile="!IbcMergePackageVersionOutputFile!"
 
         if not !errorlevel! == 0 (
-            echo "Failed to determine IBC Merge version."
+            echo %__ErrMsgPrefix%Failed to determine IBC Merge version.
             exit /b !errorlevel!
         )
         if not exist "!IbcMergePackageVersionOutputFile!" (
-            echo "Failed to determine IBC Merge version."
+            echo %__ErrMsgPrefix%Failed to determine IBC Merge version.
             exit /b 1
         )
-        
+
         set /p __IbcMergeVersion=<"!IbcMergePackageVersionOutputFile!"
 
         set IbcMergePath=%__PackagesDir%\microsoft.dotnet.ibcmerge\!__IbcMergeVersion!\tools\netcoreapp2.0\ibcmerge.dll
@@ -692,7 +701,7 @@ if %__BuildCoreLib% EQU 1 (
                 echo %__MsgPrefix%!NEXTCMD! >> "%__CrossGenCoreLibLog%"
                 call !NEXTCMD! >> "%__CrossGenCoreLibLog%" 2>&1
                 if NOT !errorlevel! == 0 (
-                    echo %__MsgPrefix%Error: IbcMerge of System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
+                    echo %__ErrMsgPrefix%%__MsgPrefix%Error: IbcMerge of System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
                     REM Put it in the same log, helpful for Jenkins
                     type %__CrossGenCoreLibLog%
                     goto CrossgenFailure
@@ -703,7 +712,7 @@ if %__BuildCoreLib% EQU 1 (
                 echo %__MsgPrefix%!NEXTCMD! >> "%__CrossGenCoreLibLog%"
                 call !NEXTCMD! >> "%__CrossGenCoreLibLog%" 2>&1
                 if NOT !errorlevel! == 0 (
-                    echo %__MsgPrefix%Error: IbcMerge of System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
+                    echo %__ErrMsgPrefix%%__MsgPrefix%Error: IbcMerge of System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
                     REM Put it in the same log, helpful for Jenkins
                     type %__CrossGenCoreLibLog%
                     goto CrossgenFailure
@@ -722,7 +731,7 @@ if %__BuildCoreLib% EQU 1 (
                 echo %__MsgPrefix%!NEXTCMD! >> "%__CrossGenCoreLibLog%"
                 call !NEXTCMD! >> "%__CrossGenCoreLibLog%" 2>&1
                 if NOT !errorlevel! == 0 (
-                    echo %__MsgPrefix%Error: IbcMerge of System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
+                    echo %__ErrMsgPrefix%%__MsgPrefix%Error: IbcMerge of System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
                     REM Put it in the same log, helpful for Jenkins
                     type %__CrossGenCoreLibLog%
                     goto CrossgenFailure
@@ -733,14 +742,14 @@ if %__BuildCoreLib% EQU 1 (
                 echo %__MsgPrefix%!NEXTCMD! >> "%__CrossGenCoreLibLog%"
                 call !NEXTCMD! >> "%__CrossGenCoreLibLog%" 2>&1
                 if NOT !errorlevel! == 0 (
-                    echo %__MsgPrefix%Error: IbcMerge of System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
+                    echo %__ErrMsgPrefix%%__MsgPrefix%Error: IbcMerge of System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
                     REM Put it in the same log, helpful for Jenkins
                     type %__CrossGenCoreLibLog%
                     goto CrossgenFailure
                 )
             ) else (
                 echo %__MsgPrefix%!TargetOptimizationDataFile! does not exist >> %__CrossGenCoreLibLog%
-                echo %__MsgPrefix%Error: IbcMerge of System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
+                echo %__ErrMsgPrefix%%__MsgPrefix%Error: IbcMerge of System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
                 REM Put it in the same log, helpful for Jenkins
                 type %__CrossGenCoreLibLog%
                 goto CrossgenFailure
@@ -779,7 +788,7 @@ if %__BuildNativeCoreLib% EQU 1 (
         call                                 "%__VCToolsRoot%\vcvarsall.bat" !__VCExecArch!
         @if defined _echo @echo on
         if NOT !errorlevel! == 0 (
-            echo %__MsgPrefix%Error: Failed to load native tools environment for !__VCExecArch!
+            echo %__ErrMsgPrefix%%__MsgPrefix%Error: Failed to load native tools environment for !__VCExecArch!
             goto CrossgenFailure
         )
 
@@ -790,7 +799,7 @@ if %__BuildNativeCoreLib% EQU 1 (
         )
         echo %__MsgPrefix%Copying "!__PgoRtPath!" into "%__BinDir%"
         copy /y "!__PgoRtPath!" "%__BinDir%" || (
-            echo %__MsgPrefix%Error: copy failed
+            echo %__ErrMsgPrefix%%__MsgPrefix%Error: copy failed
             goto CrossgenFailure
         )
         REM End HACK
@@ -814,7 +823,7 @@ if %__BuildNativeCoreLib% EQU 1 (
     echo %__MsgPrefix%!NEXTCMD! >> "%__CrossGenCoreLibLog%"
     !NEXTCMD! >> "%__CrossGenCoreLibLog%" 2>&1
     if NOT !errorlevel! == 0 (
-        echo %__MsgPrefix%Error: CrossGen System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
+        echo %__ErrMsgPrefix%%__MsgPrefix%Error: CrossGen System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
         REM Put it in the same log, helpful for Jenkins
         type %__CrossGenCoreLibLog%
         goto CrossgenFailure
@@ -825,7 +834,7 @@ if %__BuildNativeCoreLib% EQU 1 (
     echo %__MsgPrefix%!NEXTCMD! >> "%__CrossGenCoreLibLog%"
     !NEXTCMD! >> "%__CrossGenCoreLibLog%" 2>&1
     if NOT !errorlevel! == 0 (
-        echo %__MsgPrefix%Error: CrossGen /CreatePdb System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
+        echo %__ErrMsgPrefix%%__MsgPrefix%Error: CrossGen /CreatePdb System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
         REM Put it in the same log, helpful for Jenkins
         type %__CrossGenCoreLibLog%
         goto CrossgenFailure
@@ -857,7 +866,7 @@ if %__BuildPackages% EQU 1 (
         /p:PortableBuild=true /p:ArcadeBuild=true^
         /p:Platform=%__BuildArch% %__CommonMSBuildArgs% %__UnprocessedBuildArgs%
     if not !errorlevel! == 0 (
-        echo %__MsgPrefix%Error: Nuget package generation failed. Refer to the build log file for details:
+        echo %__ErrMsgPrefix%%__MsgPrefix%Error: Nuget package generation failed. Refer to the build log file for details.
         echo     !__BuildLog!
         exit /b !errorlevel!
     )
index f4a0a69..f813902 100755 (executable)
@@ -140,12 +140,13 @@ restore_optdata()
     local OptDataProjectFilePath="$__ProjectRoot/src/.nuget/optdata/optdata.csproj"
     if [[ ( $__SkipRestoreOptData == 0 ) && ( $__isMSBuildOnNETCoreSupported == 1 ) ]]; then
         echo "Restoring the OptimizationData package"
-        "$__ProjectRoot/dotnet.sh" restore /nologo /verbosity:minimal /clp:Summary /m \
-                                   $OptDataProjectFilePath \
-                                   $__CommonMSBuildArgs $__UnprocessedBuildArgs
-        if [ $? != 0 ]; then
-            echo "Failed to restore the optimization data package."
-            exit 1
+        "$__ProjectRoot/eng/common/msbuild.sh" $__ArcadeScriptArgs \
+                                               $OptDataProjectFilePath /t:Restore /m \
+                                               $__CommonMSBuildArgs $__UnprocessedBuildArgs
+        local exit_code=$?
+        if [ $exit_code != 0 ]; then
+            echo "${__ErrMsgPrefix}Failed to restore the optimization data package."
+            exit $exit_code
         fi
     fi
 
@@ -156,19 +157,21 @@ restore_optdata()
         local IbcDataPackageVersionOutputFile="${__IntermediatesDir}/ibcoptdataversion.txt"
 
         # Writes into ${PgoDataPackageVersionOutputFile}
-        ${__ProjectDir}/dotnet.sh msbuild $OptDataProjectFilePath /t:DumpPgoDataPackageVersion ${__CommonMSBuildArgs} /p:PgoDataPackageVersionOutputFile=${PgoDataPackageVersionOutputFile} /nologo 2>&1 > /dev/null
-        if [ $? != 0 ] || [ ! -f "${PgoDataPackageVersionOutputFile}" ]; then
-            echo "Failed to get PGO data package version."
-            exit $?
+        "$__ProjectRoot/eng/common/msbuild.sh" $__ArcadeScriptArgs $OptDataProjectFilePath /t:DumpPgoDataPackageVersion ${__CommonMSBuildArgs} /p:PgoDataPackageVersionOutputFile=${PgoDataPackageVersionOutputFile} 2>&1 > /dev/null
+        local exit_code=$?
+        if [ $exit_code != 0 ] || [ ! -f "${PgoDataPackageVersionOutputFile}" ]; then
+            echo "${__ErrMsgPrefix}Failed to get PGO data package version."
+            exit $exit_code
         fi
 
         __PgoOptDataVersion=$(<"${PgoDataPackageVersionOutputFile}")
 
         # Writes into ${IbcDataPackageVersionOutputFile}
-        ${__ProjectDir}/dotnet.sh msbuild $OptDataProjectFilePath /t:DumpIbcDataPackageVersion ${__CommonMSBuildArgs} /p:IbcDataPackageVersionOutputFile=${IbcDataPackageVersionOutputFile} /nologo 2>&1 > /dev/null
-        if [ $? != 0 ] || [ ! -f "${IbcDataPackageVersionOutputFile}" ]; then
-            echo "Failed to get IBC data package version."
-            exit $?
+        "$__ProjectRoot/eng/common/msbuild.sh" $__ArcadeScriptArgs $OptDataProjectFilePath /t:DumpIbcDataPackageVersion ${__CommonMSBuildArgs} /p:IbcDataPackageVersionOutputFile=${IbcDataPackageVersionOutputFile} 2>&1 > /dev/null
+        local exit_code=$?
+        if [ $exit_code != 0 ] || [ ! -f "${IbcDataPackageVersionOutputFile}" ]; then
+            echo "${__ErrMsgPrefix}Failed to get IBC data package version."
+            exit $exit_code
         fi
 
         __IbcOptDataVersion=$(<"${IbcDataPackageVersionOutputFile}")
@@ -232,13 +235,14 @@ build_native()
         __versionSourceFile="$intermediatesForBuild/version.c"
         if [ $__SkipGenerateVersion == 0 ]; then
             pwd
-            "$__ProjectRoot/eng/common/msbuild.sh" $__ProjectRoot/eng/empty.csproj \
-                                        /p:NativeVersionFile=$__versionSourceFile \
-                                        /p:ArcadeBuild=true /t:GenerateNativeVersionFile /restore \
-                                        $__CommonMSBuildArgs $__UnprocessedBuildArgs
-            if [ $? -ne 0 ]; then
-                echo "Failed to generate native version file."
-                exit $?
+            "$__ProjectRoot/eng/common/msbuild.sh" $__ArcadeScriptArgs $__ProjectRoot/eng/empty.csproj \
+                                                   /p:NativeVersionFile=$__versionSourceFile \
+                                                   /p:ArcadeBuild=true /t:GenerateNativeVersionFile /restore \
+                                                   $__CommonMSBuildArgs $__UnprocessedBuildArgs
+        local exit_code=$?
+        if [ $exit_code != 0 ]; then
+                echo "${__ErrMsgPrefix}Failed to generate native version file."
+                exit $exit_code
             fi
         else
             # Generate the dummy version.c, but only if it didn't exist to make sure we don't trigger unnecessary rebuild
@@ -271,7 +275,7 @@ build_native()
     fi
 
     if [ ! -f "$intermediatesForBuild/$buildFile" ]; then
-        echo "Failed to generate $message build project!"
+        echo "${__ErrMsgPrefix}Failed to generate $message build project!"
         exit 1
     fi
 
@@ -291,9 +295,10 @@ build_native()
     echo "Executing $buildTool install -j $__NumProc"
 
     $buildTool install -j $__NumProc
-    if [ $? != 0 ]; then
-        echo "Failed to build $message."
-        exit 1
+    local exit_code=$?
+    if [ $exit_code != 0 ]; then
+        echo "${__ErrMsgPrefix}Failed to build $message."
+        exit $exit_code
     fi
 
     popd
@@ -378,18 +383,20 @@ build_CoreLib_ni()
     echo "Generating native image of System.Private.CoreLib.dll for $__BuildOS.$__BuildArch.$__BuildType. Logging to \"$__CrossGenCoreLibLog\"."
     echo "$__CrossGenExec /Platform_Assemblies_Paths $__CoreLibILDir $__IbcTuning /out $__BinDir/System.Private.CoreLib.dll $__CoreLibILDir/System.Private.CoreLib.dll"
     $__CrossGenExec /Platform_Assemblies_Paths $__CoreLibILDir $__IbcTuning /out $__BinDir/System.Private.CoreLib.dll $__CoreLibILDir/System.Private.CoreLib.dll >> $__CrossGenCoreLibLog 2>&1
-    if [ $? -ne 0 ]; then
-        echo "Failed to generate native image for System.Private.CoreLib. Refer to $__CrossGenCoreLibLog"
-        exit 1
+    local exit_code=$?
+    if [ $exit_code != 0 ]; then
+        echo "${__ErrMsgPrefix}Failed to generate native image for System.Private.CoreLib. Refer to $__CrossGenCoreLibLog"
+        exit $exit_code
     fi
 
     if [ "$__BuildOS" == "Linux" ]; then
         echo "Generating symbol file for System.Private.CoreLib.dll"
         echo "$__CrossGenExec /Platform_Assemblies_Paths $__BinDir /CreatePerfMap $__BinDir $__BinDir/System.Private.CoreLib.dll"
         $__CrossGenExec /Platform_Assemblies_Paths $__BinDir /CreatePerfMap $__BinDir $__BinDir/System.Private.CoreLib.dll >> $__CrossGenCoreLibLog 2>&1
-        if [ $? -ne 0 ]; then
-            echo "Failed to generate symbol file for System.Private.CoreLib. Refer to $__CrossGenCoreLibLog"
-            exit 1
+        local exit_code=$?
+        if [ $exit_code != 0 ]; then
+            echo "${__ErrMsgPrefix}Failed to generate symbol file for System.Private.CoreLib. Refer to $__CrossGenCoreLibLog"
+            exit $exit_code
         fi
     fi
 }
@@ -419,28 +426,30 @@ build_CoreLib()
         __ExtraBuildArgs="$__ExtraBuildArgs /p:BuildManagedTools=true"
     fi
 
-    $__ProjectRoot/dotnet.sh restore /nologo /verbosity:minimal /clp:Summary \
-                             /p:PortableBuild=true /maxcpucount /p:IncludeRestoreOnlyProjects=true /p:ArcadeBuild=true\
-                             $__ProjectDir/src/build.proj \
-                             /flp:Verbosity=normal\;LogFile=$__LogsDir/System.Private.CoreLib_$__BuildOS__$__BuildArch__$__BuildType.log \
-                             /p:__IntermediatesDir=$__IntermediatesDir /p:__RootBinDir=$__RootBinDir \
-                             $__CommonMSBuildArgs $__ExtraBuildArgs $__UnprocessedBuildArgs
-
-    if [ $? -ne 0 ]; then
-        echo "Failed to restore managed components."
-        exit 1
+    "$__ProjectRoot/eng/common/msbuild.sh" $__ArcadeScriptArgs \
+                                           $__ProjectDir/src/build.proj /t:Restore \
+                                           /p:PortableBuild=true /maxcpucount /p:IncludeRestoreOnlyProjects=true /p:ArcadeBuild=true\
+                                           /flp:Verbosity=normal\;LogFile=$__LogsDir/System.Private.CoreLib_$__BuildOS__$__BuildArch__$__BuildType.log \
+                                           /p:__IntermediatesDir=$__IntermediatesDir /p:__RootBinDir=$__RootBinDir \
+                                           $__CommonMSBuildArgs $__ExtraBuildArgs $__UnprocessedBuildArgs
+
+    local exit_code=$?
+    if [ $exit_code != 0 ]; then
+        echo "${__ErrMsgPrefix}Failed to restore managed components."
+        exit $exit_code
     fi
 
-    $__ProjectRoot/dotnet.sh msbuild /nologo /verbosity:minimal /clp:Summary \
-                             /p:PortableBuild=true /maxcpucount /p:ArcadeBuild=true\
-                             $__ProjectDir/src/build.proj \
-                             /flp:Verbosity=normal\;LogFile=$__LogsDir/System.Private.CoreLib_$__BuildOS__$__BuildArch__$__BuildType.log \
-                             /p:__IntermediatesDir=$__IntermediatesDir /p:__RootBinDir=$__RootBinDir \
-                             $__CommonMSBuildArgs $__ExtraBuildArgs $__UnprocessedBuildArgs
-
-    if [ $? -ne 0 ]; then
-        echo "Failed to build managed components."
-        exit 1
+    "$__ProjectRoot/eng/common/msbuild.sh" $__ArcadeScriptArgs \
+                                           $__ProjectDir/src/build.proj \
+                                           /p:PortableBuild=true /maxcpucount /p:ArcadeBuild=true\
+                                           /flp:Verbosity=normal\;LogFile=$__LogsDir/System.Private.CoreLib_$__BuildOS__$__BuildArch__$__BuildType.log \
+                                           /p:__IntermediatesDir=$__IntermediatesDir /p:__RootBinDir=$__RootBinDir \
+                                           $__CommonMSBuildArgs $__ExtraBuildArgs $__UnprocessedBuildArgs
+
+    local exit_code=$?
+        if [ $exit_code != 0 ]; then
+        echo "${__ErrMsgPrefix}Failed to build managed components."
+        exit $exit_code
     fi
 
     local __CoreLibILDir=$__BinDir/IL
@@ -511,9 +520,10 @@ generate_NugetPackages()
                                        /p:__IntermediatesDir=$__IntermediatesDir /p:__RootBinDir=$__RootBinDir /p:__DoCrossArchBuild=$__CrossBuild \
                                        $__CommonMSBuildArgs $__UnprocessedBuildArgs
 
-    if [ $? -ne 0 ]; then
-        echo "Failed to generate Nuget packages."
-        exit 1
+    local exit_code=$?
+    if [ $exit_code != 0 ]; then
+        echo "${__ErrMsgPrefix}Failed to generate Nuget packages."
+        exit $exit_code
     fi
 }
 
@@ -610,6 +620,12 @@ case $OSName in
         ;;
 esac
 
+# Set variables used when running in an Azure DevOps task
+if [[ ! -z $TF_BUILD ]]; then
+  __ArcadeScriptArgs="--ci"
+  __ErrMsgPrefix="##vso[task.logissue type=error]"
+fi
+
 __BuildType=Debug
 __CodeCoverage=
 __IgnoreWarnings=0
index 31fdb4a..653ebf3 100644 (file)
     <PackageReference Include="optimization.IBC.CoreCLR" Version="$(optimizationIBCCoreCLRVersion)" Condition="'$(optimizationIBCCoreCLRVersion)'!=''" />
   </ItemGroup>
 
-  <PropertyGroup>
-    <RestoreSources>
-      https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json;
-      $(RestoreSources);
-    </RestoreSources>
-  </PropertyGroup>
-
   <!--                                                                       -->
   <!-- Task: DumpPgoDataPackageVersion                                       -->
   <!--                                                                       -->
@@ -25,7 +18,7 @@
   <!--                                                                       -->
   <!-- DumpPgoDataPackageVersion is used by build.sh and build.cmd to pass   -->
   <!-- the version information to cmake. The task will write a file to be    -->
-  <!-- read back by build.cmd/sh. The path for the file is:                  --> 
+  <!-- read back by build.cmd/sh. The path for the file is:                  -->
   <!-- $(PgoDataPackageVersionOutputFile)                                    -->
   <!--                                                                       -->
 
@@ -46,7 +39,7 @@
   <!--                                                                       -->
   <!-- DumpIbcDataPackageVersion is used by build.sh and build.cmd to pass   -->
   <!-- the version information to cmake. The task will write a file to be    -->
-  <!-- read back by build.cmd/sh. The path for the file is:                  --> 
+  <!-- read back by build.cmd/sh. The path for the file is:                  -->
   <!-- $(IbcDataPackageVersionOutputFile)                                    -->
   <!--                                                                       -->
   <Target Name="DumpIbcDataPackageVersion">