You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用csi.exe运行C#脚本能否返回值?附实现示例

用csi.exe运行C#脚本时返回值的实现方法

当然可以!csi.exe(C#交互脚本工具)完全支持让脚本返回退出码,这样你就能通过%ERRORLEVEL%获取对应的结果。你的思路方向是对的,但有几个小细节需要调整,才能让它正常工作:

方法一:使用带返回值的Main方法

你的脚本代码需要补充必要的命名空间引用,否则会因为找不到File类而编译失败。修正后的脚本如下:

using System.IO;

static int Main(string[] args) 
{
    if (!File.Exists(@"E:\Ivara\Cache\TimeCacheLastUpdated.txt")) 
    {
        // 注意:Windows的ERRORLEVEL是无符号整数,返回负数会被转换为超大正数(比如-1会变成4294967295)
        // 建议使用正数作为错误码,比如1
        return 1;
    }
    return 6;
}

运行你提供的命令就可以获取返回值:

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Roslyn\csi.exe" E:\build\CruiseControl\bin\TestLoggingConfigExists.csx
ECHO %ERRORLEVEL%
  • 当目标文件不存在时,%ERRORLEVEL%会显示1(如果你改成返回1的话);
  • 文件存在时则显示6;
  • 如果脚本编译失败(比如漏加命名空间),csi会返回1作为错误码。

方法二:使用Environment.Exit()(更简洁)

如果不想定义Main方法,直接在脚本的顶级语句里调用Environment.Exit(exitCode)也能达到同样的效果,这种方式更直观:

using System.IO;

if (!File.Exists(@"E:\Ivara\Cache\TimeCacheLastUpdated.txt"))
{
    Environment.Exit(1);
}
Environment.Exit(6);

运行命令的方式和上面完全一样,%ERRORLEVEL%会正确获取到你传入的退出码。

小提示

Windows的%ERRORLEVEL%本质是32位无符号整数,所以尽量避免返回负数——比如返回-1的话,实际会显示为4294967295,这不符合常规的错误码使用习惯,建议用1、2这类正数表示不同的错误场景。

内容的提问来源于stack exchange,提问作者Derek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:47:27