内容简介:通过Roslyn构建自己的C#脚本(更新版)
之前写过文章介绍过如何 通过Roslyn构建自己的C#脚本 ,但那篇文章是参考自Roslyn CTP版的,记得本来想等到Roslyn正式版出来重新更新一下文档的,不过记得后来Roslyn是跳票了的,Scripting API在正式版本中都一度被移除了,这个更新就没有做下去了。
最近看到有人在原文中询问如何使用C# Script API,便查询了一下相关资料,这个功能是在的VS2015 update 1中才正式放出的,其时已经到16年了,使用方法与之前已经大有不同了,便重新写一篇介绍下如何使用C# Script。
C# Interactive窗口
微软在Visual Studio中已经提供了一个C#交互窗口,通过它就可以直接执行C# 脚本语句。
这个窗口是非常强大的,支持语法高亮,智能提示,使用起来是非常方便的。简单的一些静态函数测试可以直接在该窗口中进行,还是非常方便的。
C#命令行接口
C#交互窗口方式虽然很方便,但我们很多时候是希望脚本程序能脱离VisualStudio单独执行,此时我们可以用到的命令行程序csi.exe。
一方面csi程序可以以REPL方式执行输入的命令,另一方面它可以可以执行执行脚本文件。
一个简单的示例程序如下(注:可以在VS中编写CSX文件,VS2017就已经有语法高亮和智能提示支持了)
//hello .csx using System; var msg = "Hello"; Console.WriteLine(msg);
执行指令如下: csi hello.csx
这样,我们就可以像脚本语言那样加载我们的C#程序了
另外,关于C# Script语法,基本上和C#差不多,主要多了如下两个:
-
#load 用来加载别的脚本文件
-
#r 用来加载dll
例如
#load "setup.csx" #r "nunit.core.dll" #r "nunit.core.interfaces.dll"
我还没有找到官方的文档(谁知道的话请告知),有一些第三方文档可以参考下: Writing a script
C# Scripting API
更进一步的,我们可以把脚本程序动态集成到我们的应用程序中,此时就要用到C# Scripting API了。要使用C# Script API,首先需要.net framework 4.6或.net core 1.0以上环境。
然后安装Nuget程序包: Install-Package Microsoft.CodeAnalysis.CSharp.Scripting
首先来个简单的计算:
object result = await CSharpScript.EvaluateAsync("1 + 2"); int result = await CSharpScript.EvaluateAsync<int>("1 + 2");
异常处理也是可以的:
try { Console.WriteLine(await CSharpScript.EvaluateAsync("2+2")); } catch (CompilationErrorException e) { Console.WriteLine(string.Join(Environment.NewLine, e.Diagnostics)); }
带上下文状态执行:
var state = await CSharpScript.RunAsync("int x = 1;"); state = await state.ContinueWithAsync("int y = 2;"); state = await state.ContinueWithAsync("x+y"); Console.WriteLine(state.ReturnValue);
添加程序集引用:
var result = await CSharpScript.EvaluateAsync("System.Net.Dns.GetHostName()", ScriptOptions.Default.WithReferences(typeof(System.Net.Dns).Assembly));
添加using导入
var result = await CSharpScript.EvaluateAsync("Sqrt(2)", ScriptOptions.Default.WithImports("System.Math"));
和宿主程序中的对象交互:
public class Globals { public int X; public int Y; } var globals = new Globals { X = 1, Y = 2 }; Console.WriteLine(await CSharpScript.EvaluateAsync<int>("X+Y", globals: globals));
作为脚本重复执行:
var script = CSharpScript.Create<int>("X*Y", globalsType: typeof(Globals)); script.Compile(); for (int i = 0; i < 10; i++) { Console.WriteLine((await script.RunAsync(new Globals { X = i, Y = i })).ReturnValue); }
脚本也可以携带上下文状态:
var script = CSharpScript.Create<int>("int x = 1;"). ContinueWith("int y = 2;"). ContinueWith("x + y"); Console.WriteLine((await script.RunAsync()).ReturnValue);
当然除了Roslyn外,也有一些第三方的脚本解决方案,使用时也可以参考一下。
-
Nake (.Net Framework & Mono)
-
dotnet script (.NET Core)
以上所述就是小编给大家介绍的《通过Roslyn构建自己的C#脚本(更新版)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- cinatra发布新版本
- 如何阅读OpenStack源码(更新版)
- 新版任你发,我用Java 8!
- Zabbix 新版微信告警 [2017]
- [ Laravel 5.7 文档 ] 序言 —— 新版特性
- 新版本react的context使用
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
测试驱动的JavaScript开发
Christian Johansen / 赵勇、程德、凌杰、高博 / 机械工业出版社 / 2012-2-9 / 69.00元
本书是一本完整的、基于最佳实践的JavaScript敏捷测试指南,同时又有着测试驱动开发方法(TDD)所带来的质量保证。领先一步的JavaScript敏捷开发者Christian Johansen的讨论涵盖了将最先进的自动化测试用于JavaScript开发环境的方方面面,带领读者走查整个开发的生命周期,从项目启动到应用程序部署。本书的主要内容包括:掌握自动化测试和TDD;构建有效的自动化测试工作流......一起来看看 《测试驱动的JavaScript开发》 这本书的介绍吧!