什么是dotnet-script

"dotnet-script"是github上一个开源的.net core global tool, 项目地址https://github.com/filipw/dotnet-script。使用它,开发人员可以获得在命令行直接运行C#脚本文件的能力, 且不需要创建任何项目文件。

安装/卸载dotnet-script

.NET Core 2.1中引入了global tool, 所以你可以在命令行直接使用以下命令安装dotnet-script

> dotnet tool install -g dotnet-script
You can invoke the tool using the following command: dotnet-script
Tool 'dotnet-script' (version '0.26.1') was successfully installed.

Tips: 为了使用global tool, 请安装.NET Core SDK 2.1.300及以上版本。

如果希望卸载dotnet-script, 请使用一下命令

> dotnet tool uninstall dotnet-script -g

创建第一个HelloWorld脚本

下面我们通过一个最简单的例子,说明一下dotnet-script的使用方式。

首先我们创建一个helloworld.csx文件, 并在文件中编写以下代码

Console.WriteLine("Hello World!");

你没有看错,这个文件中只有一行代码,没有任何的using, namespace等代码。

然后我们在命令行执行dotnet-script helloworld.csx, 结果如下,"Hello World!"被正确的输出了。

C:\script>dotnet-script helloworld.csx
Hello world!

创建一个添加Nuget引用的脚本

dotnet-script可以支持使用Roslyn #r 语法(#r "nuget: {包名}, {版本号}")引用各种Nuget包。

例如,下面我们修改helloworld.csx文件, 引入Newtownsoft.Json库,输出一个序列化之后的字符串。

#r "nuget: Newtonsoft.Json, 11.0.2"

using Newtonsoft.Json;

Console.WriteLine(JsonConvert.SerializeObject(new {
Message = "HelloWorld!"
}));

我们使用命令行dotnet-script helloworld.csx重新运行helloworld.csx文件, 结果如下

C:\script>dotnet-script helloworld.csx
{"Message":"HelloWorld!"}

Tips: 这里使用的是默认的Nuget源, 如果你想手动添加其他Nuget源, 运行脚本的时候,请添加-s参数, 例dotnet script foo.csx -s https://SomePackageSource

EHRL

最新版本的dotnet-script还支持了EHRL - Read Evaluate Print Loop, 即读取-求值-打印-循环, 这是一个在诸如Ruby、Python和Lisp这样的动态语言才有的特性。

开发人员可以在命令行使用dotnet script命令, 进入EHRL模式, 根据你输入的表达式, dotnet-script会帮你打印出表达式的结果。

例:

C:\script>dotnet script
> 2+2
4
> var myName = "Lamond Lu";
> Console.WriteLine(myName.ToUpper());
LAMOND LU
>

当然在这里你也可以使用Roslyn #r 语法(#r "nuget: {包名}, {版本号}")引用各种Nuget包, 例:

C:\script>dotnet script
> #r "nuget: Automapper, 6.1.1"
> using AutoMapper;
> typeof(MapperConfiguration)
[AutoMapper.MapperConfiguration]
>

除此之外,EHRL中,还支持多行代码模式。 dotnet-script会帮助你检测代码块是否完整,如果当你点击回车的时候,代码块不完整,就会出现*开头的新行。

C:\script>dotnet script
> public class Foo{
* public string Name{get;set;}
* }
> var foo = new Foo();
>

运行远程脚本

除了运行本地脚本,最新版本的dotnet-script还添加了运行远程脚本的功能,你需要使用http/https将你的脚本文件暴露出来。

例:

C:\script>dotnet script https://tinyurl.com/y8cda9zt
Hello World

编译DLL或EXE文件

dotnet-script还支持根据csx脚本文件,生成EXE或DLL文件。

可用的参数列表如下:

参数 说明
-o 指定文件生成的目录,默认当前目录
-n 指定生成的文件名
-c 指定使用的配置[Release/Debug]
-d 是否启用Debug输出
-r 指定运行时

我们以第一个HelloWorld.csx为例

C:\script>dotnet-script publish helloworld.csx
Published C:\script\helloworld.csx (executable) to C:\script\publish\win10-x64

运行以上命令后,dotnet-script会使用SCD(Self-contained deployments)的方式生成script.dll和script.exe及运行它所需要的所有基础库。

总结

dotnet-script作为了一个global tool, 相当简单易用, 使用它,你可以像学习Python一样学习.NET Core,在命令行练习各种代码。当然开发人员也可以使用它编写一些简单脚本,而不需要每次都去创建工程项目文件。

.NET Core脚本工具dotnet-script的更多相关文章

  1. .net core下的dotnet全局工具

    .net core 2.1后支持了一个全新的部署和扩展命令,可以自己注册全局命令行. dotnet install tool -g dotnetsaydotnetsay 也可以自己构建自己的命令行,一 ...

  2. 『.NET Core CLI工具文档』(一).NET Core 命令行工具(CLI)

    说明:本文是个人翻译文章,由于个人水平有限,有不对的地方请大家帮忙更正. 原文:.NET Core Command Line Tools 翻译:.NET Core命令行工具 什么是 .NET Core ...

  3. 『.NET Core CLI工具文档』(七)dotnet-new

    说明:本文是个人翻译文章,由于个人水平有限,有不对的地方请大家帮忙更正. 原文:dotnet-new 翻译:dotnet-new 名称 dotnet-new -- 创建一个新的 .NET Core 项 ...

  4. REDGATE又一好用的脚本工具

    REDGATE又一好用的脚本工具   REDGATE又一好用的脚本工具 先说明一下:这个工具是免费的 下载地址:http://www.red-gate.com/products/dba/sql-scr ...

  5. 使用 .NET Core CLI 创建 .NET Core 全局工具

    https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=2&ch=&tn=baiduhome_pg& ...

  6. .NET Core 跨平台发布(dotnet publish)

    .NET Core 跨平台发布(dotnet publish) ,无需安装.NET Core SDK,就可以运行. 前面讲解了.NET Core 的VSCode 开发.现在来讲讲发布(dotnet p ...

  7. 面试小记---外部脚本必须包含 <script> 标签吗?

    外部脚本必须包含 <script> 标签吗? 答案是否定的. 身为小白的我一开始也是以为这句话的对了,因为本来嘛,引用外部脚本不都用的是<script>标签中的src属性吗.所 ...

  8. ArcGIS使用Python脚本工具

    在Pyhton写的一些代码,用户交互不方便,用户体验比较差,不方便重用.在ArcGIS中可以将用写的Python代码导入到ToolBox中,这样用起来就比较方便了.这里用按要素裁剪栅格的Python来 ...

  9. ArcMap自定义脚本工具制作

    原文 ArcMap自定义脚本工具制作 在制图的前期,一般需要做一些数据的整理,如图层合并.裁剪等工作.虽然在ArcMap中也有提供对应的工具,但使用起来需要点技巧.如批量裁剪,虽然可以实现,但出来的结 ...

随机推荐

  1. 极简科普 1:什么是 VOIP

    VoIP 的全称是 Voice over Internet Protocol.简单说,就是用过 IP 网络进行即时的语音/视频通信.注意,这里只强调了在传输过程中有使用 IP 网络,并没有说只通过 I ...

  2. centos7基于samba服务配置实例

    需求: 账号建立:产研部门所有人员,产品.开发.测试.运维: 目录建立:各二级部门分别建立以部门名称为文件夹的目录: 初步权限管理:各部门成员对本部门目录有读写权限,对其他部门目录有读权限: 建立共享 ...

  3. BZOJ 3864

    dp of dp 我就是来贴个代码 #include<bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i=(a ...

  4. CSS3 常用属性

    1------border-radius (盒子圆角 border-radius :border-radius:5px 4px 3px 2px; 左上,右上,右下,左下 2------如果将一个正方形 ...

  5. linux configure 应用

    linux下configure命令详细介绍 2018年01月11日 15:02:20 冷月霜 阅读数:705 标签: configure 更多 个人分类: 数据库技术   Linux环境下的软件安装, ...

  6. LeetCode 80 Remove Duplicates from Sorted Array II [Array/auto] <c++>

    LeetCode 80 Remove Duplicates from Sorted Array II [Array/auto] <c++> 给出排序好的一维数组,如果一个元素重复出现的次数 ...

  7. Reveal : Xcode辅助界面调试工具

    Reveal简介: Reveal是一款iOS界面调试工具,辅助Xcode进行界面调试,使用它可以在iOS开发的时候动态的查看和修改应用程序的界面. 软件下载 首先去官网下载Reveal,下载地址:ht ...

  8. Notepad++常用快捷键

    Ctrl-H    打开Find / Replace 对话框 Ctrl-D    复制当前行 Ctrl-L    删除当前行 Ctrl-T    上下行交换 F3    找下一个 Shift-F3   ...

  9. Vue取消eslint语法限制

    话不多说,先上图: 当然,这里的警告我是知道怎么回事,原来eslint是一个语法检查工具,但是限制很严格,在我的vue文件里面很多空格都会导致红线警告(可以屏蔽),虽然可以屏蔽,但是在编译的时候老是会 ...

  10. 实验5 Spark SQL编程初级实践

    今天做实验[Spark SQL 编程初级实践],虽然网上有答案,但都是用scala语言写的,于是我用java语言重写实现一下. 1 .Spark SQL 基本操作将下列 JSON 格式数据复制到 Li ...