加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

从c#应用程序执行ScriptCS

发布时间:2020-12-16 02:03:59 所属栏目:百科 来源:网络整理
导读:背景 我正在创建一个运行一些状态检查的c#应用程序(想想nagios样式检查). 我理想的是这个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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读