-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBuild.cmd
More file actions
123 lines (104 loc) · 3.82 KB
/
Copy pathBuild.cmd
File metadata and controls
123 lines (104 loc) · 3.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
@echo off
setlocal enabledelayedexpansion
title C# Compiler Selector (Hybrid)
:MENU
echo ========================================================
echo Select a Compiler
echo ========================================================
echo.
echo [1] .NET SDK 10.0.101 (Roslyn) [Targets .NET 10]
echo [2] Visual Studio "18" (Roslyn) [Targets .NET 8 ]
echo [3] .NET Framework 4.0 (64-bit) [Targets .NET 4.0]
echo.
echo ========================================================
set /p choice="Enter ID (1-3): "
REM --- SELECTION LOGIC ---
set "MODE=LEGACY"
set "TARGET_TFM="
set "TARGET_VERSION="
set "DEFINES="
if "%choice%"=="1" (
REM OPTION 1: .NET SDK 10 - Use SDK Reference Assemblies
set "REF_PATH=%ProgramFiles%\dotnet\packs\Microsoft.NETCore.App.Ref\10.0.1\ref\net10.0"
set "SELECTED_CSC=%ProgramFiles%\dotnet\sdk\10.0.101\Roslyn\bincore\csc.exe"
set "MODE=MODERN"
set "TARGET_TFM=net10.0"
set "TARGET_VERSION=10.0.0"
set "DEFINES=/define:REF_NET10"
set "BUILD_FLAGS=/nologo /noconfig /nostdlib"
)
if "%choice%"=="2" (
REM OPTION 2: Visual Studio 18 Roslyn - Target .NET 8
REM Fallback to VS-bundled runtime assemblies (requires System.Private.CoreLib)
set "REF_PATH=%ProgramFiles%\Microsoft Visual Studio\18\Community\dotnet\net8.0\runtime\shared\Microsoft.NETCore.App\8.0.21"
set "USE_PRIVATE_CORELIB=1"
set "SELECTED_CSC=%ProgramFiles%\Microsoft Visual Studio\18\Community\MSBuild\Current\Bin\Roslyn\csc.exe"
set "MODE=MODERN"
set "TARGET_TFM=net8.0"
set "TARGET_VERSION=8.0.0"
set "DEFINES=/define:REF_NET8"
set "BUILD_FLAGS=/nologo /noconfig /nostdlib"
)
if "%choice%"=="3" (
REM OPTION 3: Legacy .NET Framework 4.0
set "SELECTED_CSC=%windir%\Microsoft.NET\Framework64\v4.0.30319\csc.exe"
set "DEFINES=/define:REF_FX40"
set "BUILD_FLAGS=/nologo"
)
if not defined SELECTED_CSC (
echo Invalid selection.
exit /b
)
REM --- COMPILE & RUN ---
if exist Universal.exe del Universal.exe
echo Using compiler: "%SELECTED_CSC%"
echo Target Mode: %MODE%
if defined TARGET_TFM echo Target TFM: %TARGET_TFM%
if defined REF_PATH echo Ref Path: "!REF_PATH!"
echo.
if "%MODE%"=="MODERN" (
REM Generate the appropriate runtimeconfig.json
echo [Step 0] Generating runtimeconfig.json for %TARGET_TFM%...
(
echo {
echo "runtimeOptions": {
echo "tfm": "%TARGET_TFM%",
echo "framework": {
echo "name": "Microsoft.NETCore.App",
echo "version": "%TARGET_VERSION%"
echo }
echo }
echo }
) > Universal.runtimeconfig.json
REM Build the reference flags
set "REF_FLAGS=/r:"!REF_PATH!\System.Runtime.dll" /r:"!REF_PATH!\System.Console.dll" /r:"!REF_PATH!\System.Runtime.Extensions.dll" /r:"!REF_PATH!\System.Runtime.InteropServices.RuntimeInformation.dll""
if defined USE_PRIVATE_CORELIB (
set "REF_FLAGS=/r:"!REF_PATH!\System.Private.CoreLib.dll" !REF_FLAGS!"
)
echo [Step 1] Compiling against %TARGET_TFM% References...
echo Defines: %DEFINES%
"%SELECTED_CSC%" %BUILD_FLAGS% %DEFINES% !REF_FLAGS! /out:Universal.exe Universal.cs
if !ERRORLEVEL! NEQ 0 (
echo.
echo [ERROR] Compilation Failed.
exit /b
)
echo.
echo [Step 2] Execution ^(via dotnet host^)...
echo --------------------------------------------------------
dotnet Universal.exe
)
if "%MODE%"=="LEGACY" (
echo [Step 1] Compiling against .NET 4.0 GAC...
echo Defines: %DEFINES%
"%SELECTED_CSC%" %BUILD_FLAGS% %DEFINES% /out:Universal.exe Universal.cs
if !ERRORLEVEL! NEQ 0 (
echo.
echo [ERROR] Compilation Failed.
exit /b
)
echo.
echo [Step 2] Execution ^(Native Windows^)...
echo --------------------------------------------------------
Universal.exe
)