从c#应用程序执行ScriptCS

背景

我正在创建一个运行一些状态检查的c#应用程序(想想nagios样式检查).

我理想的是这个c#应用程序查看特定目录,只编译/执行其中的任何scriptcs脚本,并根据结果进行操作(例如,发送失败状态检查的电子邮件警报).

我希望脚本返回一个整数或某些东西(例如),该整数将指示状态检查成功或失败的天气.

值返回到C#应用程序.

0 - Success
1 - Warning
2 - Error

当我第一次执行此任务时,我认为这是MEF的工作,但是创建这些“状态检查”而不必创建项目或编译任何东西会非常方便,只需在文件夹中填写脚本脚本似乎更具吸引力.

所以我的问题是

>是否有任何关于使用c#app和scriptcs的文档/示例(google并没有给我带来太多帮助)?
>这是脚本的用例还是它真的不打算像这样使用?
>使用roslyn或某些动态编译/执行创建自定义解决方案,我会更轻松吗? (我对scriptsc的经验很少)

解决方法

我找到了一些关于如何做到这一点的简单例子:

从磁盘上的文件加载脚本并运行它:
https://github.com/glennblock/scriptcs-hosting-example

您可以在其中提交代码的网站,它将返回结果:
https://github.com/filipw/sample-scriptcs-webhost

以下是如何加载脚本文件,运行它并返回结果的示例:

public dynamic RunScript()
{
    var logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

    var scriptServicesBuilder = new ScriptServicesBuilder(new ScriptConsole(),logger).
        LogLevel(LogLevel.Info).Cache(false).Repl(false).ScriptEngine<RoslynScriptEngine>();

    var scriptcs = scriptServicesBuilder.Build();

    scriptcs.Executor.Initialize(new[] { "System.Web" },Enumerable.Empty<IScriptPack>());
    scriptcs.Executor.AddReferences(Assembly.GetExecutingAssembly());

    var result = scriptcs.Executor.Execute("HelloWorld.csx");

    scriptcs.Executor.Terminate();

    if (result.CompileExceptionInfo != null)
        return new { error = result.CompileExceptionInfo.sourceException.Message };
    if (result.ExecuteExceptionInfo != null)
        return new { error = result.ExecuteExceptionInfo.sourceException.Message };

    return result.ReturnValue;
}

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...