前言

应用.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自身的装置绝对容易。

  1. 装置dotnet core 2.1+ sdk ,如果应用 C# 8语言个性,须要装置 dotnet core 3.1+ sdk
  2. 运行dotnet tool install -g dotnet-script 即可

dotnet-script 装置实现之后,间接运行dotnet script即可进入RPEL模式中,间接撸C#代码间接运行。

~$ dotnet script> var x = 1;> x+x2

想要更好的体验就须要装置VS Code和OmniShap。

  1. 装置VS Code
  2. 装置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();

参考

  1. dotnet script
  2. C# Script
  3. C# scripts using dotnet-script
  4. ASP.NET Core updates in .NET 6 Preview 4
  5. Building Minimal APIs In .NET 6