dotnet-exec 0.9.0 released

dotnet-exec 0.9.0 released

Intro

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

0.9.0 是 .NET 7 正式发布的第一个版本,之前不想装 .NET 7 预览版的小伙伴,快来尝尝吧~

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 0.9.0 released

Implicit code/script

在之前的版本中,对于原始代码和 script 我们需要显式指定,例如:

dotnet-exec 'code:Console.WriteLine(1+1);'
dotnet-exec 'script:Guid.NewGuid()'

在 0.9.0 版本中我们就可以不指定了

dotnet-exec 'Console.WriteLine(1+1);'
dotnet-exec 'Guid.NewGuid()'

dotnet-exec 0.9.0 released

这样对于一些简单操作例如 Guid.NewGuid() 这样的就会很方便了,同样的也是可以结合之前的 reference/using 等功能来一起使用的

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

dotnet-exec 'CsvHelper.GetCsvText(new[]{1,2,3}).Dump()' -r "nuget:WeihanLi.Npoi,2.4.2" -u WeihanLi.Npoi

dotnet-exec 0.9.0 released

Project file

有些情况下可能会执行某个项目里的某个示例,而在项目文件中会有引用的 nuget 包的信息或者隐式命名空间的引用,这个版本中会从项目文件中获取 PackageReferenceUsing 来补充 reference 和 using 信息

可以参考这个集成测试:

[Fact]
public async Task ProjectFileTest()
{
    var options = new ExecOptions()
    {
        ProjectPath = @"https://raw.githubusercontent.com/WeihanLi/SamplesInPractice/master/net6sample/ImplicitUsingsSample/ImplicitUsingsSample.csproj",
        Script = "Console.WriteLine(MyFile.Exists("appsettings.json"));"
    };
    var result = await _handler.Execute(options);
    Assert.Equal(0, result);
}

我们也可以直接执行命令来测试,项目文件的内容如下:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="WeihanLi.Common" Version="1.0.46" />
  </ItemGroup>

  <ItemGroup>
    <Using Include="System.Console" Static="true" />
    <Using Include="WeihanLi.Common.Helpers" />
    <Using Include="System.IO.File" Alias="MyFile" />
    <Using Remove="System" />
  </ItemGroup>
</Project>

我们可以执行下面的命令:

dotnet-exec 'WriteLine(MyFile.Exists("Hello.cs"));' --project 'https://raw.githubusercontent.com/WeihanLi/SamplesInPractice/master/net6sample/ImplicitUsingsSample/ImplicitUsingsSample.csproj'

执行结果如下:

dotnet-exec 0.9.0 released

可以看到我们的 WriteLineMyFile 都正常工作了~~

这里有一点需要注意的是,目前 script 模式是不支持 using static 和 using alias 的,只有 code 模式是支持的

More

原来有一个隐藏的高级模式,原本想动态 build 项目获取编译所需的所有引用信息,但是因为 roslyn 的一个 BUG 一直有问题,这个版本增加了简单的项目文件中提取 NuGet 引用和 using 就打算放弃这个功能了,代码也在这个版本中移除了

针对引用进行了一些优化,原来的时候如果出现同一个 nuget 包引用了两个不同的版本会解析两次最终执行的时候会选择高版本的包,新的版本中会先按 nuget 包进行分组,如果有多个版本就直接取最新的版本,这样就不需要再做不必要的解析了

从 0.8.0 开始,引入了一个单独 NuGet 包 ReferenceResolver 来帮助解析 Roslyn 动态编译需要用到的引用,0.9.0 进行了一些完善和改进,已经开始在 NatashaPad 项目中使用来减少引用处理的复杂度,有需要的小伙伴也可以尝试一下

References

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


原文始发于微信公众号(amazingdotnet):dotnet-exec 0.9.0 released

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/59632.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!