乐趣区

关于c#:使用C写脚本

前言

应用.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+x
2

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

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

参考

  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
退出移动版