From f5957b1bae3028fd3854230164d9f18b40c7193f Mon Sep 17 00:00:00 2001 From: Viktor Hofer Date: Wed, 11 Dec 2019 21:01:58 +0100 Subject: [PATCH] Move dotnet.cmd/sh helper scripts into the repo root (#672) * Move dotnet helper scripts to repo root * Don't swallow InitializeDotNetCli output * Use temporary file to store sdk location To avoid a nested process chain in which the inner process then invokes the host, we instead create a temporary file to store the sdk location. --- dotnet.cmd | 22 +++++++++++ dotnet.sh | 27 +++++++++++++ eng/common/tools.ps1 | 18 ++++++++- eng/update-dependencies.cmd | 13 ------- src/coreclr/build-test.cmd | 2 +- src/coreclr/build-test.sh | 2 +- src/coreclr/build.cmd | 4 +- src/coreclr/build.sh | 2 +- src/coreclr/dotnet.cmd | 38 ------------------- src/coreclr/dotnet.sh | 34 ----------------- src/coreclr/tests/bringup_runtest.sh | 2 +- src/coreclr/tests/runtest.cmd | 2 +- src/coreclr/tests/runtest.sh | 2 +- .../tests/setup-stress-dependencies.cmd | 7 +--- .../tests/setup-stress-dependencies.sh | 2 +- .../src/readytorun/r2rdump/rebaseline.cmd | 25 ++++++------ 16 files changed, 89 insertions(+), 113 deletions(-) create mode 100644 dotnet.cmd create mode 100755 dotnet.sh delete mode 100644 eng/update-dependencies.cmd delete mode 100644 src/coreclr/dotnet.cmd delete mode 100755 src/coreclr/dotnet.sh diff --git a/dotnet.cmd b/dotnet.cmd new file mode 100644 index 00000000000000..b3cf59daa28baf --- /dev/null +++ b/dotnet.cmd @@ -0,0 +1,22 @@ +@echo off + +powershell -ExecutionPolicy ByPass -NoProfile -Command "& { . '%~dp0eng\common\tools.ps1'; InitializeDotNetCli $true $true }" + +if NOT [%ERRORLEVEL%] == [0] ( + echo Failed to install or invoke dotnet... 1>&2 + exit /b %ERRORLEVEL% +) + +set /p dotnetPath=<%~dp0artifacts\toolset\sdk.txt + +:: Clear the 'Platform' env variable for this session, as it's a per-project setting within the build, and +:: misleading value (such as 'MCD' in HP PCs) may lead to build breakage (issue: #69). +set Platform= + +:: Don't resolve runtime, shared framework, or SDK from other locations to ensure build determinism +set DOTNET_MULTILEVEL_LOOKUP=0 + +:: Disable first run since we want to control all package sources +set DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 + +call "%dotnetPath%\dotnet.exe" %* diff --git a/dotnet.sh b/dotnet.sh new file mode 100755 index 00000000000000..a612ebac1ce1e4 --- /dev/null +++ b/dotnet.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +source="${BASH_SOURCE[0]}" +# resolve $SOURCE until the file is no longer a symlink +while [[ -h $source ]]; do + scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + source="$(readlink "$source")" + + # if $source was a relative symlink, we need to resolve it relative to the path where the + # symlink file was located + [[ $source != /* ]] && source="$scriptroot/$source" +done +scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + +# Don't resolve runtime, shared framework, or SDK from other locations to ensure build determinism +export DOTNET_MULTILEVEL_LOOKUP=0 + +# Disable first run since we want to control all package sources +export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 + +source $scriptroot/eng/common/tools.sh + +InitializeDotNetCli true # Install +__dotnetDir=${_InitializeDotNetCli} + +dotnetPath=${__dotnetDir}/dotnet +${dotnetPath} "$@" diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1 index d762c9f044a652..7753e7541ca3e6 100644 --- a/eng/common/tools.ps1 +++ b/eng/common/tools.ps1 @@ -98,7 +98,7 @@ function Exec-Process([string]$command, [string]$commandArgs) { } } -function InitializeDotNetCli([bool]$install) { +function InitializeDotNetCli([bool]$install, [bool]$createSdkLocationFile) { if (Test-Path variable:global:_DotNetInstallDir) { return $global:_DotNetInstallDir } @@ -146,6 +146,22 @@ function InitializeDotNetCli([bool]$install) { } $env:DOTNET_INSTALL_DIR = $dotnetRoot + + if ($createSdkLocationFile) { + # Create a temporary file under the toolset dir and rename it to sdk.txt to avoid races. + do { + $sdkCacheFileTemp = Join-Path $ToolsetDir $([System.IO.Path]::GetRandomFileName()) + } + until (!(Test-Path $sdkCacheFileTemp)) + Set-Content -Path $sdkCacheFileTemp -Value $dotnetRoot + + try { + Rename-Item -Force -Path $sdkCacheFileTemp 'sdk.txt' + } catch { + # Somebody beat us + Remove-Item -Path $sdkCacheFileTemp + } + } } # Add dotnet to PATH. This prevents any bare invocation of dotnet in custom diff --git a/eng/update-dependencies.cmd b/eng/update-dependencies.cmd deleted file mode 100644 index a6ae7e70448eb7..00000000000000 --- a/eng/update-dependencies.cmd +++ /dev/null @@ -1,13 +0,0 @@ -@if not defined _echo @echo off -setlocal - -set "DotNetCli=%~dp0..\dotnet.cmd" -set "DependenciesBuildProj=%~dp0..\tests\build.proj" - -echo Running: "%DotNetCli%" msbuild "%DependenciesBuildProj%" %* -call "%DotNetCli%" msbuild "%DependenciesBuildProj%" %* -if NOT [%ERRORLEVEL%]==[0] ( - exit /b 1 -) - -exit /b 0 diff --git a/src/coreclr/build-test.cmd b/src/coreclr/build-test.cmd index 735d93f6ffab09..ec133de6dba6b1 100644 --- a/src/coreclr/build-test.cmd +++ b/src/coreclr/build-test.cmd @@ -531,7 +531,7 @@ set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%" 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\src\runtest.proj /nodereuse:false /p:BuildWrappers=true !__Logging! %__msbuildArgs% %TargetsWindowsMsbuildArg% %__SkipFXRestoreArg% %__UnprocessedBuildArgs% +call "%__RepoRootDir%\dotnet.cmd" msbuild %__ProjectDir%\tests\src\runtest.proj /nodereuse:false /p:BuildWrappers=true !__Logging! %__msbuildArgs% %TargetsWindowsMsbuildArg% %__SkipFXRestoreArg% %__UnprocessedBuildArgs% if errorlevel 1 ( echo %__ErrMsgPrefix%%__MsgPrefix%Error: XUnit wrapper build failed. Refer to the build log files for details: echo %__BuildLog% diff --git a/src/coreclr/build-test.sh b/src/coreclr/build-test.sh index 584ea4632c7d96..ae0d229cbe190b 100755 --- a/src/coreclr/build-test.sh +++ b/src/coreclr/build-test.sh @@ -663,7 +663,7 @@ __CrossBuild=0 __DistroRid="" __DoCrossgen=0 __DoCrossgen2=0 -__DotNetCli="$__ProjectDir/dotnet.sh" +__DotNetCli="$__RepoRootDir/dotnet.sh" __GccBuild=0 __GccMajorVersion=0 __GccMinorVersion=0 diff --git a/src/coreclr/build.cmd b/src/coreclr/build.cmd index cba40ae1def738..71f4831fc694e9 100644 --- a/src/coreclr/build.cmd +++ b/src/coreclr/build.cmd @@ -656,7 +656,7 @@ if %__BuildCoreLib% EQU 1 ( if "%__BuildManagedTools%" == "1" ( echo %__MsgPrefix%Publishing crossgen2... - call %__ProjectDir%\dotnet.cmd publish --self-contained -r win-%__BuildArch% -c %__BuildType% -o "%__BinDir%\crossgen2" "%__ProjectDir%\src\tools\crossgen2\crossgen2\crossgen2.csproj" /p:BuildArch=%__BuildArch% + call %__RepoRootDir%\dotnet.cmd publish --self-contained -r win-%__BuildArch% -c %__BuildType% -o "%__BinDir%\crossgen2" "%__ProjectDir%\src\tools\crossgen2\crossgen2\crossgen2.csproj" /p:BuildArch=%__BuildArch% if not !errorlevel! == 0 ( echo %__ErrMsgPrefix%%__MsgPrefix%Error: Failed to build crossgen2. @@ -706,7 +706,7 @@ if %__BuildCoreLib% EQU 1 ( ) ) - set IBCMergeCommand=%__ProjectDir%\dotnet.cmd --roll-forward-on-no-candidate-fx 2 "!IbcMergePath!" + set IBCMergeCommand=%__RepoRootDir%\dotnet.cmd --roll-forward-on-no-candidate-fx 2 "!IbcMergePath!" REM Merge the optimization data into the source DLL set NEXTCMD=!IBCMergeCommand! -q -f -delete -mo "!InputAssemblyFile!" !RawOptimizationDataFile! diff --git a/src/coreclr/build.sh b/src/coreclr/build.sh index d2828626ece947..68185e0d4bd68f 100755 --- a/src/coreclr/build.sh +++ b/src/coreclr/build.sh @@ -392,7 +392,7 @@ build_CoreLib() if [[ "$__BuildManagedTools" -eq "1" ]]; then echo "Publishing crossgen2 for $__DistroRid" - "$__ProjectRoot/dotnet.sh" publish --self-contained -r $__DistroRid -c $__BuildType -o "$__BinDir/crossgen2" "$__ProjectRoot/src/tools/crossgen2/crossgen2/crossgen2.csproj" /p:BuildArch=$__BuildArch + "$__RepoRootDir/dotnet.sh" publish --self-contained -r $__DistroRid -c $__BuildType -o "$__BinDir/crossgen2" "$__ProjectRoot/src/tools/crossgen2/crossgen2/crossgen2.csproj" /p:BuildArch=$__BuildArch local exit_code=$? if [ $exit_code != 0 ]; then diff --git a/src/coreclr/dotnet.cmd b/src/coreclr/dotnet.cmd deleted file mode 100644 index b3e619fc567162..00000000000000 --- a/src/coreclr/dotnet.cmd +++ /dev/null @@ -1,38 +0,0 @@ -@if not defined _echo @echo off -setlocal - -set "__ProjectDir=%~dp0" -set "__RepoRootDir=%__ProjectDir%..\..\" - -:: Clear the 'Platform' env variable for this session, as it's a per-project setting within the build, and -:: misleading value (such as 'MCD' in HP PCs) may lead to build breakage (issue: #69). -set Platform= - -:: Don't resolve runtime, shared framework, or SDK from other locations to ensure build determinism -set DOTNET_MULTILEVEL_LOOKUP=0 - -:: Disable first run since we do not need all ASP.NET packages restored. -set DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 - -set PS_DOTNET_INSTALL_SCRIPT=". %__RepoRootDir%eng\common\tools.ps1; InitializeDotNetCli($true)" -set "PS_COMMAND=powershell -NoProfile -ExecutionPolicy unrestricted -Command %PS_DOTNET_INSTALL_SCRIPT%" - -echo running: %PS_COMMAND% -for /f "delims=" %%l in ('%PS_COMMAND%') do set "__dotnetDir=%%l" - -if NOT [%ERRORLEVEL%] == [0] ( - echo Failed to install dotnet using Arcade. - exit /b %ERRORLEVEL% -) - -set "dotnetPath=%__dotnetDir%\dotnet.exe" - -pushd %~dp0 -echo Running: "%dotnetPath%" %* -call "%dotnetPath%" %* -popd -if NOT [%ERRORLEVEL%]==[0] ( - exit /b 1 -) - -exit /b 0 diff --git a/src/coreclr/dotnet.sh b/src/coreclr/dotnet.sh deleted file mode 100755 index 74d8b1f5939ee9..00000000000000 --- a/src/coreclr/dotnet.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env bash - -working_tree_root="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -__ProjectDir=${working_tree_root} -__RepoRootDir=${working_tree_root}/../.. - -# Don't resolve runtime, shared framework, or SDK from other locations to ensure build determinism -export DOTNET_MULTILEVEL_LOOKUP=0 - -# Disable first run since we want to control all package sources -export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 - -source ${__RepoRootDir}/eng/common/tools.sh - -InitializeDotNetCli -__dotnetDir=${_InitializeDotNetCli} - -if [ $? != 0 ]; then - echo "Failed to install dotnet using Arcade" - exit $? -fi - -dotnetPath=${__dotnetDir}/dotnet - -echo "Running: ${dotnetPath} $@" -${dotnetPath} "$@" -if [ $? -ne 0 ] -then - echo "ERROR: An error occurred in ${dotnetPath} $@. Check logs under $working_tree_root." - exit 1 -fi - -echo "Command successfully completed." -exit 0 diff --git a/src/coreclr/tests/bringup_runtest.sh b/src/coreclr/tests/bringup_runtest.sh index efc4cc058e2011..916589f10c6ff9 100755 --- a/src/coreclr/tests/bringup_runtest.sh +++ b/src/coreclr/tests/bringup_runtest.sh @@ -448,7 +448,7 @@ function create_testhost fi # Initialize test variables - local dotnetExe=$coreClrSrc/dotnet.sh + local dotnetExe=$coreClrSrc/../../dotnet.sh local coreClrSrcTestDir=$coreClrSrc/tests if [ -z $coreClrBinDir ]; then diff --git a/src/coreclr/tests/runtest.cmd b/src/coreclr/tests/runtest.cmd index e080d34d1f4f87..facd9e2d9968c3 100644 --- a/src/coreclr/tests/runtest.cmd +++ b/src/coreclr/tests/runtest.cmd @@ -20,7 +20,7 @@ set "__RootBinDir=%__ProjectDir%\..\artifacts" set "__LogsDir=%__RootBinDir%\log" set "__MsbuildDebugLogsDir=%__LogsDir%\MsbuildDebugLogs" set __ToolsDir=%__ProjectDir%\..\Tools -set "DotNetCli=%__ProjectDir%\..\dotnet.cmd" +set "DotNetCli=%__ProjectDir%\..\..\..\dotnet.cmd" set __Sequential= set __msbuildExtraArgs= diff --git a/src/coreclr/tests/runtest.sh b/src/coreclr/tests/runtest.sh index e8f61c2d7d76ca..737de857a2b52a 100755 --- a/src/coreclr/tests/runtest.sh +++ b/src/coreclr/tests/runtest.sh @@ -59,7 +59,7 @@ function create_testhost fi # Initialize test variables - local dotnetExe=$coreClrSrc/dotnet.sh + local dotnetExe=$coreClrSrc/../../dotnet.sh local coreClrSrcTestDir=$coreClrSrc/tests if [ -z $coreClrBinDir ]; then diff --git a/src/coreclr/tests/setup-stress-dependencies.cmd b/src/coreclr/tests/setup-stress-dependencies.cmd index c6c9ed1daca6d3..cf79d241c1f46b 100644 --- a/src/coreclr/tests/setup-stress-dependencies.cmd +++ b/src/coreclr/tests/setup-stress-dependencies.cmd @@ -52,14 +52,9 @@ REM === Check if dotnet CLI and necessary directories exist REM === REM ========================================================================================= -set __DotNetCmd=%__ThisScriptPath%..\dotnet.cmd +set __DotNetCmd=%__ThisScriptPath%..\..\..\dotnet.cmd set __CsprojPath=%__ThisScriptPath%\stress_dependencies\stress_dependencies.csproj -if not exist "%__DotNetCmd%" ( - echo dotnet.exe does not exist: %__DotNetCmd% - goto Fail -) - REM Create directories needed if not exist "%__OutputDir%" md "%__OutputDir%" diff --git a/src/coreclr/tests/setup-stress-dependencies.sh b/src/coreclr/tests/setup-stress-dependencies.sh index 00eb9a3d764182..9ab4170e3fa38c 100755 --- a/src/coreclr/tests/setup-stress-dependencies.sh +++ b/src/coreclr/tests/setup-stress-dependencies.sh @@ -90,7 +90,7 @@ fi # This script must be located in coreclr/tests. scriptDir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -dotnet=$"${scriptDir}"/../dotnet.sh +dotnet=$"${scriptDir}"/../../../dotnet.sh csprojPath="${scriptDir}"/stress_dependencies/stress_dependencies.csproj if [ ! -e $dotnetCmd ]; then diff --git a/src/coreclr/tests/src/readytorun/r2rdump/rebaseline.cmd b/src/coreclr/tests/src/readytorun/r2rdump/rebaseline.cmd index 15ec802fbefce8..09a15ab01bb012 100644 --- a/src/coreclr/tests/src/readytorun/r2rdump/rebaseline.cmd +++ b/src/coreclr/tests/src/readytorun/r2rdump/rebaseline.cmd @@ -1,35 +1,36 @@ set CurrentDir=%~dp0 set ProjectDir=%CurrentDir%..\..\..\..\ +set RepoRoot=%ProjectDir%..\..\ -"%ProjectDir%dotnet.cmd" build /p:__BuildArch=x64 /p:__BuildOS=Windows_NT /p:__BuildType=Checked %ProjectDir%src\tools\r2rdump\R2RDump.csproj -"%ProjectDir%dotnet.cmd" build /p:__BuildArch=x64 /p:__BuildOS=Windows_NT /p:__BuildType=Debug %ProjectDir%src\tools\r2rdump\R2RDump.csproj -"%ProjectDir%dotnet.cmd" build /p:__BuildArch=x86 /p:__BuildOS=Windows_NT /p:__BuildType=Release %ProjectDir%src\tools\r2rdump\R2RDump.csproj -"%ProjectDir%dotnet.cmd" build /p:__BuildArch=x86 /p:__BuildOS=Windows_NT /p:__BuildType=Debug %ProjectDir%src\tools\r2rdump\R2RDump.csproj +"%RepoRoot%dotnet.cmd" build /p:__BuildArch=x64 /p:__BuildOS=Windows_NT /p:__BuildType=Checked %ProjectDir%src\tools\r2rdump\R2RDump.csproj +"%RepoRoot%dotnet.cmd" build /p:__BuildArch=x64 /p:__BuildOS=Windows_NT /p:__BuildType=Debug %ProjectDir%src\tools\r2rdump\R2RDump.csproj +"%RepoRoot%dotnet.cmd" build /p:__BuildArch=x86 /p:__BuildOS=Windows_NT /p:__BuildType=Release %ProjectDir%src\tools\r2rdump\R2RDump.csproj +"%RepoRoot%dotnet.cmd" build /p:__BuildArch=x86 /p:__BuildOS=Windows_NT /p:__BuildType=Debug %ProjectDir%src\tools\r2rdump\R2RDump.csproj set tests=HelloWorld GcInfoTransitions GenericFunctions MultipleRuntimeFunctions (for %%a in (%tests%) do ( - "%ProjectDir%dotnet.cmd" build /p:__BuildArch=x64 /p:__BuildOS=Windows_NT /p:__BuildType=Checked "%ProjectDir%tests\src\readytorun\r2rdump\files\%%a.csproj" + "%RepoRoot%dotnet.cmd" build /p:__BuildArch=x64 /p:__BuildOS=Windows_NT /p:__BuildType=Checked "%ProjectDir%tests\src\readytorun\r2rdump\files\%%a.csproj" %ProjectDir%artifacts\tests\Windows_NT.x64.Checked\Tests\Core_Root\crossgen /readytorun /platform_assemblies_paths %ProjectDir%artifacts\tests\Windows_NT.x64.Checked\Tests\Core_Root /out %%a.ni.dll %ProjectDir%artifacts\tests\Windows_NT.x64.Checked\readytorun\r2rdump\files\%%a\%%a.dll - "%ProjectDir%dotnet.cmd" %ProjectDir%artifacts\bin\coreclr\Windows_NT.x64.Checked\netcoreapp2.0\R2RDump.dll --in %%a.ni.dll --out %ProjectDir%tests\src\readytorun\r2rdump\files\Windows_NT.x64.Checked\%%a.xml -x -v --ignoreSensitive + "%RepoRoot%dotnet.cmd" %ProjectDir%artifacts\bin\coreclr\Windows_NT.x64.Checked\netcoreapp2.0\R2RDump.dll --in %%a.ni.dll --out %ProjectDir%tests\src\readytorun\r2rdump\files\Windows_NT.x64.Checked\%%a.xml -x -v --ignoreSensitive )) (for %%a in (%tests%) do ( - "%ProjectDir%dotnet.cmd" build /p:__BuildArch=x64 /p:__BuildOS=Windows_NT /p:__BuildType=Debug "%ProjectDir%tests\src\readytorun\r2rdump\files\%%a.csproj" + "%RepoRoot%dotnet.cmd" build /p:__BuildArch=x64 /p:__BuildOS=Windows_NT /p:__BuildType=Debug "%ProjectDir%tests\src\readytorun\r2rdump\files\%%a.csproj" %ProjectDir%artifacts\tests\Windows_NT.x64.Debug\Tests\Core_Root\crossgen /readytorun /platform_assemblies_paths %ProjectDir%artifacts\tests\Windows_NT.x64.Debug\Tests\Core_Root /out %%a.ni.dll %ProjectDir%artifacts\tests\Windows_NT.x64.Debug\readytorun\r2rdump\files\%%a\%%a.dll - "%ProjectDir%dotnet.cmd" %ProjectDir%artifacts\bin\coreclr\Windows_NT.x64.Debug\netcoreapp2.0\R2RDump.dll --in %%a.ni.dll --out %ProjectDir%tests\src\readytorun\r2rdump\files\Windows_NT.x64.Debug\%%a.xml -x -v --ignoreSensitive + "%RepoRoot%dotnet.cmd" %ProjectDir%artifacts\bin\coreclr\Windows_NT.x64.Debug\netcoreapp2.0\R2RDump.dll --in %%a.ni.dll --out %ProjectDir%tests\src\readytorun\r2rdump\files\Windows_NT.x64.Debug\%%a.xml -x -v --ignoreSensitive )) (for %%a in (%tests%) do ( - "%ProjectDir%dotnet.cmd" build /p:__BuildArch=x86 /p:__BuildOS=Windows_NT /p:__BuildType=Release "%ProjectDir%tests\src\readytorun\r2rdump\files\%%a.csproj" + "%RepoRoot%dotnet.cmd" build /p:__BuildArch=x86 /p:__BuildOS=Windows_NT /p:__BuildType=Release "%ProjectDir%tests\src\readytorun\r2rdump\files\%%a.csproj" %ProjectDir%artifacts\tests\Windows_NT.x86.Release\Tests\Core_Root\crossgen /readytorun /platform_assemblies_paths %ProjectDir%artifacts\tests\Windows_NT.x86.Release\Tests\Core_Root /out %%a.ni.dll %ProjectDir%artifacts\tests\Windows_NT.x86.Release\readytorun\r2rdump\files\%%a\%%a.dll - "%ProjectDir%dotnet.cmd" %ProjectDir%artifacts\bin\coreclr\Windows_NT.x86.Release\netcoreapp2.0\R2RDump.dll --in %%a.ni.dll --out %ProjectDir%tests\src\readytorun\r2rdump\files\Windows_NT.x86.Release\%%a.xml -x -v --ignoreSensitive + "%RepoRoot%dotnet.cmd" %ProjectDir%artifacts\bin\coreclr\Windows_NT.x86.Release\netcoreapp2.0\R2RDump.dll --in %%a.ni.dll --out %ProjectDir%tests\src\readytorun\r2rdump\files\Windows_NT.x86.Release\%%a.xml -x -v --ignoreSensitive )) (for %%a in (%tests%) do ( - "%ProjectDir%dotnet.cmd" build /p:__BuildArch=x86 /p:__BuildOS=Windows_NT /p:__BuildType=Debug "%ProjectDir%tests\src\readytorun\r2rdump\files\%%a.csproj" + "%RepoRoot%dotnet.cmd" build /p:__BuildArch=x86 /p:__BuildOS=Windows_NT /p:__BuildType=Debug "%ProjectDir%tests\src\readytorun\r2rdump\files\%%a.csproj" %ProjectDir%artifacts\tests\Windows_NT.x86.Debug\Tests\Core_Root\crossgen /readytorun /platform_assemblies_paths %ProjectDir%artifacts\tests\Windows_NT.x86.Debug\Tests\Core_Root /out %%a.ni.dll %ProjectDir%artifacts\tests\Windows_NT.x86.Debug\readytorun\r2rdump\files\%%a\%%a.dll - "%ProjectDir%dotnet.cmd" %ProjectDir%artifacts\bin\coreclr\Windows_NT.x86.Debug\netcoreapp2.0\R2RDump.dll --in %%a.ni.dll --out %ProjectDir%tests\src\readytorun\r2rdump\files\Windows_NT.x86.Debug\%%a.xml -x -v --ignoreSensitive + "%RepoRoot%dotnet.cmd" %ProjectDir%artifacts\bin\coreclr\Windows_NT.x86.Debug\netcoreapp2.0\R2RDump.dll --in %%a.ni.dll --out %ProjectDir%tests\src\readytorun\r2rdump\files\Windows_NT.x86.Debug\%%a.xml -x -v --ignoreSensitive )) COPY /Y %ProjectDir%tests\src\readytorun\r2rdump\files\Windows_NT.x64.Checked\*.xml %ProjectDir%tests\src\readytorun\r2rdump\files\Windows_NT.x64.Release\