前言
应用.NET的同学们可能都会有一个比拟苦楚的体验,就是如果须要写一段测试的代码或者示例代码,也不得不创立一个我的项目去解决,即使是最根底的控制台程序, 应用 dotnet cli,也须要面对如下一段最根底的入口代码。
using System;namespace Demo{ class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } }}
全然不像python、js之类,关上编辑器/命令行就能够撸代码一样的不便。
作为支流的开发语言,天然是有特定的解决方案的。
老牌的.NET程序员可能相熟的一个开发工具LINQPad,就是一个不错的.NET代码演练工具,同时也提供了F#和SQL语言反对,设置能够间接链接数据库进行查问,不堪称不弱小。
现在LINQPad 6 也反对了.NET 5,也是一个不错的开发辅助工具。
尽管LINQPad也提供了免费版的,然而想要应用NuGet包集成、代码提醒、debug等高级性能的话,还是须要购买受权的,如果经济能力富裕的话,尽量间接购买PREMIUM版本即可,体验最残缺的LINQPad。
除了LINQPad,还有其余很多的抉择,其中一个可能获取C#最原生体验的,就是间接应用C# script。
早在 VS 2015 update 1的时候,VS就集成了一个 C# REPL Command-Line Interface(csi.exe),能够在命令行中间接执行C#语句,整体的体验和Python REPL和Node.js REPL差不多。于此同时,推出了一种新的脚本文件格式 csx,这样的话就能够应用C#写脚本文件了。
.NET Core时代以来,有了更多开源工具的抉择,其中的 dotnet script就是一个十分不错的C#脚本工具。
联合VS Code 和 OmniSharp ,应用 dotnet script能够给到相当不错的C#脚本开发体验。
当然也是反对NuGet包和调试,而且开源收费,得益于相干性能的跨平台个性,根本反对全平台。
装置
dotnet script自身的装置绝对容易。
- 装置dotnet core 2.1+ sdk ,如果应用 C# 8语言个性,须要装置 dotnet core 3.1+ sdk
- 运行
dotnet tool install -g dotnet-script
即可
dotnet-script 装置实现之后,间接运行dotnet script
即可进入RPEL模式中,间接撸C#代码间接运行。
~$ dotnet script> var x = 1;> x+x2
想要更好的体验就须要装置VS Code和OmniShap。
- 装置VS Code
- 装置C#插件,由OmniSharp驱动,所以装置实现之后插件会主动启动相干的服务
应用
装置完以上工具之后,新建一个.csx文件(例如main.csx),也能够应用dotnet script init
指令间接初始化一个文件进去。
#!/usr/bin/env dotnet-scriptConsole.WriteLine("Hello world!");
这个就有点脚本语言的感觉了。
在命令行间接执行dotnet script main.csx
即可。
终归不是解释性语言,C# script还是须要编译的,所以稍作期待,就能够看到输入后果了。
- 如何应用命令行参数
执行形如dotnet script main.csx -- arg1 arg2 arg3
,就能够将arg1,arg2,arg3
作为参数传递到脚本中。
在脚本代码中能够从全局汇合Args
中获取。
- 如何增加NuGet包
在脚本文件的头部增加#r
指令就能够装置NuGet包
#r "nuget: AutoMapper, 6.1.0"
现在的nuget.org也减少了'Script & Interactive'的援用指令,能够不便的复制应用了。
须要留神的是,在VS Code中,每次增加新的NuGet包,须要重启OmniSharp Server 才会使代码剖析失效。
好在VS Code在(Ctrl/CMD + Shift + P)
命令栏能够间接执行指令。
- 如何援用其余文件
当代码量比拟大的时候,能够拆分文件方便管理,文件间能够应用#load
指令进入导入。
例如
#load "Demo.csx"
More
dotnet script更多的应用办法能够参考Github
因为dotnet script只是对roslyn API的封装,所以在执行效率上相比间接构建编译的我的项目还是会有所差异的。
所以不大倡议应用到生产环境中。
在最近推出的.NET 6 preview 4中介绍了minimal API,只须要短短的几行就能够运行起来一个Web服务器了。
var app = WebApplication.Create(args);app.MapGet("/", (Func<string>)(() => "Hello World!"));app.Run();
参考
- dotnet script
- C# Script
- C# scripts using dotnet-script
- ASP.NET Core updates in .NET 6 Preview 4
- Building Minimal APIs In .NET 6