有人可能想知道 - 如何制作一个带有嵌入式 C# 代码的 .bat
文件来“即时”编译和执行它?
是否可以在一个文件中同时包含批处理指令和 C# 代码?
最佳答案
是的,这是可能的。
这是一个例子:
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#代码。执行时,命令 shell 将忽略 c# 注释 /*
和 */
作为错误行,仅执行批处理代码。由于批处理 block 末尾的退出命令,执行永远不会到达 c# 代码。
文件的批处理部分搜索 csc.exe
(.NET 编译器)。找到后,批处理文件将自身传递给csc.exe
来编译c#代码。由于注释(/* 和 */),批处理部分被忽略,只有 c# 部分将被编译。编译后生成.exe文件执行,执行后删除。
编辑:2> nul
将标准错误(描述符 2)重定向到 null 以抑制“未找到”消息。
关于嵌入到 .bat 文件中的 C# 源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38093016/