嵌入到 .bat 文件中的 C# 源代码

标签 c# .net batch-file compilation csc

有人可能想知道 - 如何制作一个带有嵌入式 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/

相关文章:

c# - 使属性 getter 和 setter 相等(自动属性初始化程序)

c# - ssl wcf 使证书在另一台计算机上可用

C# : Conditional referencing of dll's based on radio button selection

c# - DataAnnotation for Password 的正则表达式

string - Windows批处理文件中的IF条件下的“…”和x“…”之间有什么区别?

C#工厂模式和IoC的区别

c# - 如何构造将输入下拉框的数据?

.net - .NET生成WORD文档的有效方法-服务器端

facebook - Facebook Graph API 的批量请求限制是多少?

Windows 控制台 - BAT 兼容性