.bat
파일을 컴파일하고 실행하기 위해 C# 코드가 포함 된 파일을 만드는 방법은 궁금합니다.
일괄 처리 명령어와 C# 코드를 하나의 파일에 둘 수 있습니까?.bat 파일에 C# 소스 코드가 포함되어 있습니다.
1
A
답변
2
예, 가능합니다.
Example.bat
/* 2> nul
@echo off && cls && echo Loading... && echo.
set WinDirNet=%WinDir%\Microsoft.NET\Framework
if exist "%WinDirNet%\v2.0.50727\csc.exe" set csc="%WinDirNet%\v2.0.50727\csc.exe"
if exist "%WinDirNet%\v3.5\csc.exe" set csc="%WinDirNet%\v3.5\csc.exe"
if exist "%WinDirNet%\v4.0.30319\csc.exe" set csc="%WinDirNet%\v4.0.30319\csc.exe"
if "%csc%" == "" (echo .NET Framework not found! && echo. && pause && exit)
%csc% /nologo /out:"%~dpnx0.exe" "%~dpnx0"
if not "%ERRORLEVEL%" == "0" (echo. && pause && exit)
cls
"%~dpnx0.exe" %*
del "%~dpnx0.exe"
exit
*/
using System;
class Program
{
static void Main()
{
System.Console.WriteLine("Hello, World!\r\nI am at " + System.Environment.Version);
}
}
설명 :
여기서 예는 먼저 회분식 코드 및 보조는 C# 코드이 배치 파일을 두 부분으로 구성된다. 실행 중 명령 셸은 오류 라인으로 C# -comments /*
및 */
을 무시하고 일괄 처리 코드 만 실행합니다. 배치 블록 끝의 만료 명령은 실행이 C# 코드에 도달하지 않습니다.
파일의 일괄 부분이 csc.exe
(.NET 컴파일러)을 검색합니다. 찾은 후 배치 파일은 csc.exe
으로 전달되어 C# 코드를 컴파일합니다. 주석 (/ * 및 * /)으로 인해 batch-part는 무시되고 C# 부분 만 컴파일됩니다. 컴파일 후 .exe 파일이 실행되고 실행 후 삭제됩니다.
편집 : 2> nul
리디렉션 표준 오류 (설명 2) '- 찾을 수 없습니다'라는 메시지를 억제하는 null로.
1
배치 코드를 주석으로 처리 할 수 있지만 오류로 배치에서 처리되는 것을 피할 수는 없습니다.
오류 자체를 억제 할 수 있지만 적어도 첫 번째 줄이 표시됩니다.
/* 2>NUL
@echo off
...
start the C# code
*/
...
C#-Code
C 번호는 파일의 첫 번째 문자로 :@
문자 중 하나를 허용하지 않는 것, 나는이 완벽한 솔루션을위한 가능한 방법을 볼 수 없습니다.
배치 파일을 시작할 때마다'/ * '가 내부 또는 외부 명령, 실행 가능 프로그램 또는 배치 파일로 인식되지 않습니다. : p – Nyerguds
@Nyerguds'cls'가 생각됩니다 그것을 처리하기 위해서 : p – Stephan
@Nyerguds 그것은 나에게 잘 작동하고있다. – Exerion