CSharp 脚本,是否可以 return 来自脚本 运行 和 csi.exe 的值?

CSharp scripting, is it possible to return a value from a script run with csi.exe?

我想创建这样的脚本:

static int Main(string[] args)  
{
    if ( !File.Exists( @"E:\Ivara\Cache\TimeCacheLastUpdated.txt" ) )
    {
        return -1;
    }
    return 6;
}

并且运行它是这样并得到错误级别:

"C:\Program Files (x86)\Microsoft Visual Studio17\Professional\MSBuild.0\Bin\Roslyn\csi.exe" E:\build\CruiseControl\bin\TestLoggingConfigExists.csx

ECHO %ERRORLEVEL%

您正在 运行ning 的程序将是 csi.exe,因此 %ERRORLEVEL% 将反映该程序的退出代码(即编译成功时为零,非零否则),而不是 运行s 的脚本。

想到的几个选项:

  1. 改用 csc.exe 从脚本生成可执行应用程序。 运行 并捕获其退出代码。

  2. 如果出于某种原因所有这些都需要一次性完成,请创建一个将脚本路径作为输入参数的小应用程序,生成 csc.exe 以生成可执行文件,运行 它,并整理它的退出代码。 (或使用内存中编译 + 执行替代方案:https://josephwoodward.co.uk/2016/12/in-memory-c-sharp-compilation-using-roslyn

编辑 2:这次简单多了

在脚本末尾将退出代码传递给 Environment.Exit 即可。

static int Main(string[] args)
{
    if ( !File.Exists( @"E:\Ivara\Cache\TimeCacheLastUpdated.txt" ) )
    {
        return -1;
    }
    return 6;
}

// csi.exe normally ignores the exit code from Main, but we can terminate
// the csi.exe process abruptly, and forward the exit code to the caller.
Environment.Exit(Main(Args.ToArray()));