dotnet-exec 0.4.0 released

dotnet-exec 0.4.0 released

Intro

dotnet-exec 是一个 C# 程序的命令行小工具,可以用来运行一些简单的 C# 程序而无需创建项目文件,而且可以自定义项目的入口方法,支持但不限于 Main 方法

Install/Update

dotnet-exec 是一个 dotnet tool,可以使用安装 dotnet tool 的命令来安装

安装/更新最新稳定版本:

dotnet tool update -g dotnet-execute

安装最新的 preview 版本:

dotnet tool update -g dotnet-execute --prerelease

Updates

Features

Custom Usings

在 0.4.0 版本中支持用户自定义 using 默认会包含默认的 using 引用,你也可以自定义要增加的 using

比如说下面这个示例,使用了一个 static using

dotnet-exec 'code:WriteLine(1+1);' --using "static System.Console"

输出结果如下:

11ef4047953b39089707eb033f30a1d5.png

如果不加这个引用的话就会报错

7cda115f8cb12fe6d84ba6355335d04b.png

我们也可以移除默认的 using 引用,只需要以 “-”开头就可以了,比如下面这样

b88bc8ae880faaee60818ea282c37365.png

前面可以正常编译并执行的程序就变得编译不通过了

Preview enhancement

在新版本中增加了一个 --preview 的选项来简化 --lang-version=Preview 的配置,除了 LangVersion 配置之外,还会增加一个程序集 attribute [assembly:System.Runtime.Versioning.RequiresPreviewFeatures] 来启用一些还在预览中的一些特性,从 .NET 6 开始支持正式版发布中带一些预览特性的功能,使用的话需要配置这个 attribute,所以针对 preview 增加了这个 Attribute

8e10a517f8184e159dedb11372454bb3.png

Startup type

新的版本中增加了一个 --startup-type 的选项,默认如果有多个入口会找到第一个,startup-type 可以帮助找到更加准确的入口

Reference handling refactor

之前是直接把编译好的 dll 加载到了默认的 AssemblyLoadContext,这在一般情况下没什么问题

但是在出现程序集版本冲突的时候就会报错,新的版本中会使用单独的 AssemblyLoadContext,并且修复了之前单独使用 AssemblyLoadContext 时执行代码的问题,就是因为前面介绍的 Reference Assembly,在编译时使用引用程序集,在执行时换成了包含实现的实现程序集去执行代码,这样我们在需要测试两种版本下不同的行为就会变得简单

d82870775d780fcca7f4c071a6f42032.png

Executor refactor

0.4.0 的版本中增加了 --executor-type,类似于上一个版本中的 --compiler-type,但是目前只提供了一种实现,主要为了便于更好的进行扩展

Docker support

如果你不是 dotnet 开发者,不想安装 dotnet sdk,你也可以使用 docker 来尝试它

docker run --rm weihanli/dotnet-exec:0.4.0 dotnet-exec "code:(1+1).Dump()"

a1313e7e1c16bfbd58c34153fe2dcf8c.png

docker

Bug fix

  • 修复 Linux 上 dotnet path 的问题

    在 Linux 环境上默认的 dotnet 路径并不是 dotnet 可执行文件,而是一个 symbol link 文件,需要找到对应真正的文件路径,由于代码的 BUG 导致没有转换成真正的文件路径,在 0.4.0 版本中已经修复

    5ffb27f0a3b26208f55f862515ae9eb0.png

More

目前 dotnet-exec 依赖于 SDK 环境,后面要改进一下,只需要 Runtime 环境就可以,这样 docker 镜像可以小很多,另外打算支持可以自定义引用,比如引用自己的 dll 或者指定的 Nuget 包

References

  • https://github.com/WeihanLi/dotnet-exec

  • https://www.nuget.org/packages/dotnet-execute/

  • https://hub.docker.com/repository/docker/weihanli/dotnet-exec

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值