背景
我正在创建一个运行一些状态检查的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; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。