大数跨境
0
0

dotnet-exec 0.16.0 Released

dotnet-exec 0.16.0 Released amazingdotnet
2024-01-06
3
导读:dotnet-exec 0.16.0 Released

dotnet-exec 0.16.0 Released

Intro

dotnet-exec 是一个 dotnet tool 一个命令行小工具,可以帮助我们方便地执行 C# 代码,可以用来运行一些简单的 C# 程序而无需创建项目文件,让 C# 像 python/nodejs 一样简单,而且可以自定义项目的入口方法,支持但不限于 Main 方法。

0.16.0 版本是 2024 年的第一个新版本,也是支持自定义 nuget 源的第一个版本,还有哪些更新我们一起来看下吧

Install/Update

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

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

dotnet tool update -g dotnet-execute

安装最新的 preview 版本:

dotnet tool update -g dotnet-execute --prerelease

执行 dotnet-exec -h 或者 dotnet-exec --help 即可看到一些使用说明

dotnet-exec help

也可以通过 docker/podman 来在不安装 dotnet sdk 的情况下体验,例如:

docker run --rm --pull=always weihanli/dotnet-exec:latest dotnet-exec "ApplicationHelper.RuntimeInfo"

docker

New features

NuGet Config support

在之前的版本中,我们只支持 nuget.org 上的 nuget package,在这一版本中我们会根据 nuget 的配置来查找 nuget source,而不再是只用 nuget.org 了

这样我们如果需要用到一些不在 nuget.org 中 publish 的一些 package 也变得可能,也可以支持私有的 nuget 源了

默认我们会从当前目录找 nuget.config,我们也可以通过 --nuget-config 来手动指定一个特殊位置的一个 nuget.config

大家可以自己尝试一下

dry-run option

新版本中支持了 --dry-run,可以使用这一选项来快速测试脚本编译是否有编译问题,只编译不执行

dry-run sample 

我们再加一个 using

dry-run sample2

可以看到编译结束之后就完成了,并没有执行,如果没有 --dry-run 这个 option 就会执行我们的代码

without --dry-run

env option

在之前的版本中其实我们已经可以支持通过 directive 的方法指定环境变量,比如

dotnet-exec [env:name=test'$"Hello {Environment.GetEnvironmentVariable("name")}".Dump();'

env-directive

但是有些朋友用起来会觉得有些不习惯不方便,所以我们新增加一个 --env option,我们就可以像其他参数一样进行设置

dotnet-exec '$"Hello {Environment.GetEnvironmentVariable("name")}".Dump();' --env name=test

--env option

-- command arguments

在之前的版本中,我们可以通过 --args option 来设置 script 里的命令行参数 args,但是我们使用的时候有点不便,比如:--args "--target hello"

多个参数的时候必须要写在一个参数里,所以我们参考别的项目引入了 -- ,在 -- 后面的参数都认为是命令行参数

前面的命令就可以变成为 -- --target hello

More

在之前的版本中在 Linux 平台上 config profile  的目录会和 dotnet tool 发生冲突,这一版本修改了 config profile 目录来避免这一问题

如果你有较多的 profile 配置需要迁移可以将 %USERPROFILE%/.dotnet/tools 目录下的 dotnet-exec 目录移动到 .config 目录下(如果没有需要手动新建一个),最后通过 dotnet-exec profile ls 来验证是否迁移成功

之前的版本可能会因为 reference 引用的格式不同导致重复添加引用,这一版本中做了一些优化,会先做引用格式做统一处理,之后再添加引用从而比较重复引用,比如说:

var code = """
// r: nuget:WeihanLi.Common,1.0.60
// r: nuget: WeihanLi.Common,1.0.60
// r: nuget: WeihanLi.Common, 1.0.60
// r: "
nuget: WeihanLi.Common, 1.0.60"
Console.WriteLine("
Hello World!");
"
"";
var options = new ExecOptions()
{
    Script = code,
    DryRun = true,
};
await _handler.Execute(options);
Assert.Single(options.References);

这些 reference 的不同格式最终生效的只有一个因为我们引用是相同的

最后之前我们利用 cake 来实现 CI 过程的处理,在这个版本中我们使用 C# 代码 + dotnet-exec 来取代了 cake,也在其他项目上做了一些尝试,这样的好处在于可以使用自己熟悉的语言和 API 来自定义处理,后面再具体分享示例

References

  • https://github.com/WeihanLi/dotnet-exec
  • https://www.nuget.org/packages/dotnet-execute/
  • https://hub.docker.com/r/weihanli/dotnet-exec
  • https://github.com/WeihanLi/dotnet-exec/compare/0.15.0...0.16.0


【声明】内容源于网络
0
0
amazingdotnet
dotnet 开发知识库,了不起的 dotnet,dotnet 奇淫怪巧
内容 539
粉丝 0
amazingdotnet dotnet 开发知识库,了不起的 dotnet,dotnet 奇淫怪巧
总阅读631
粉丝0
内容539