前言
应用.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+x
2
想要更好的体验就须要装置 VS Code 和 OmniShap。
- 装置 VS Code
- 装置 C# 插件,由 OmniSharp 驱动,所以装置实现之后插件会主动启动相干的服务
应用
装置完以上工具之后,新建一个.csx 文件(例如 main.csx), 也能够应用 dotnet script init
指令间接初始化一个文件进去。
#!/usr/bin/env dotnet-script
Console.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