dotnet-exec 0.11.0 released

dotnet-exec 0.11.0 released

Intro

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

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 即可看到一些使用说明

cc8e88ca05a24d313f38159103c9ddab.png

Features

Static using && using alias

在之前版本中对于 script,我们是不支持 static using 和 using alias 的,只支持 code 中使用,在 0.10.0 版本中我们支持了在 script 中使用 static using 和 using 的别名了

举个栗子

dotnet-exec 'MyConsole.WriteLine(PI)' --using 'MyConsole=System.Console' --using static 'System.Math'

8a1d696a833875d78ec66c2aca72221d.png

实现原理其实也比较简单,script 默认的 import 选项只能引入普通的命名空间,于是我们曲线救国,把 using 作为代码先执行了一下,之后再执行我们的 script 代码,在同一个上下文中会记住之前的 using 信息

6dc1c062b992ae7d8ada992cd86a1246.png

具体实现代码可以参考:https://github.com/WeihanLi/dotnet-exec/blob/2b2d2d4d47da5561001fb9f172bea65a8daa0932/src/dotnet-exec/CSharpScriptingExecutor.cs#L50-L52

Execute without SDK

在之前的版本中我们进行编译的时候始终会选择去使用引用程序集进行编译,在没有 SDK 的环境里会尝试从 nuget 上下载引用程序集进行编译

在 0.10.0 版本中,我们默认会使用 runtime 的程序集进行编译,这样即使没有网络,没有 SDK,只有 runtime 依然是可以工作的,当然你仍然可以使用 --ref-compile 选项来指定始终使用引用程序集来编译

Execute without web

在之前的版本中我们的 docker 镜像使用的是 aspnet  的镜像,考虑很多场景可能用不到 web 框架,所以从 0.11.0 版本开始默认不会再引用 web 框架引用,当然你也可以使用 -w/--web 来显式添加 web 框架引用

对于 docker 镜像,新的 latest tag 的镜像的基础镜像换成了 runtime,另外单独提供了一个 web tag 的镜像基础镜像是 aspnet,这样我们的镜像就能小很多了

但是即使你使用的是 latest 指定了使用 web 框架引用那你仍然可以运行,只是本地没有 aspnet runtime 的时候会尝试从 nuget 下载,而 web 则内置了 runtime 不需要再去下载,来个例子

首先我们可以来看一下最新的 docker 镜像中只有一个 .NET Core runtime 的信息,没有 aspnet 的 runtime 了

3ebed65c5e1ab53bf2cbb412a42253dc.png

我们用这个镜像来跑一个 web api 项目

docker run --rm --pull=always weihanli/dotnet-exec:latest dotnet-exec 'WebApplication.Create().Run();' --web

7bc6747e98c93b0ca802268260c38662.png

从上面的截图可以看到我们的 webapi 已经跑起来了,我们可以进一步使用暴露一个端口,请求一下我们的 API 试一下,让我们稍加改造

docker run --rm --pull=always -p 5000:80 weihanli/dotnet-exec:latest dotnet-exec 'WebApplication.Create().Chain(_ => _.MapRuntimeInfo()).Run();' --web --reference "nuget:WeihanLi.Web.Extensions" --using 'WeihanLi.Web.Extensions'

584c23335f934effb9969c1e1189e6b2.png

这里引用了一个我自己封装的一个扩展,会注册一个 runtime-info 的 endpoint,我这里使用的是 Github 的 CodeSpaces,会自动暴露一个 endpoint 来访问我们的服务,我们可以访问我们的 runtime-info endpoint 会看到一个类似下面的 response

61deef5e6869a0d189016d35a66cce9a.png

我们也可以使用 curl 或者可以使用 dotnet-httpie 来访问这个 endpoint

dotnet-http :5000/runtime-info

4990888e01f8f1a95eab155bfaca4998.png

ProjectReference

在 0.11.0 版本中我们增加项目引用的支持,实现原理是尝试 build 项目,引用 build 之后的 dll

使用方式如下:

dotnet-exec 'ApplicationHelper.GetLibraryInfo(typeof(CsvHelper))' --reference 'project:C:\projects\sources\WeihanLi.Npoi\src\WeihanLi.Npoi\WeihanLi.Npoi.csproj' --using 'WeihanLi.Npoi'

fa44465be0046b07a44b77b2b1549037.png

和引用 nuget 的效果基本一致

c7a9c8c2ef0eed89a44a61924739e999.png

ApplicationHelper.GetLibraryInfo 是从 assembly 信息中获取信息封装的一个方法,可以参考:https://github.com/WeihanLi/WeihanLi.Common/blob/d2db73a0e02cef009dc61190a41263ad6cb2b6bc/src/WeihanLi.Common/Helpers/ApplicationHelper.cs#L28

More

原来引用本地的 dll 需要指定一个绝对路径(full path),在 0.11.0 版本中我们支持了相对路径,使用起来也是更加的简单,新增加的项目引用也是支持相对路径的

上面的更新包含了 0.10.0 版本和 0.11.0 版本,具体更新可以参考 Github,代码变更可以参考:https://github.com/WeihanLi/dotnet-exec/compare/0.9.0...0.11.0

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.9.0...0.11.0

  • https://github.com/WeihanLi/WeihanLi.Common/blob/d2db73a0e02cef009dc61190a41263ad6cb2b6bc/src/WeihanLi.Common/Helpers/ApplicationHelper.cs#L28

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/280842.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

运行时获取类库信息

运行时获取类库信息Intro在我们向别的开源项目提 issue 的时候,可能经常会遇到别人会让我们提供使用的版本信息,如果别的开源项目类库集成了 source link,我们可以从程序集信息中获取到版本以及对应的 commit 信息,这样我们就可以…

xbox360链接pc_如何将实时电视从Xbox One流式传输到Windows PC,iPhone或Android Phone

xbox360链接pcSet up your Xbox One’s TV integration and you can do more than just watch TV on your Xbox: you can also stream that live TV from your Xbox to a Windows 10 PC, Windows phone, iPhone, iPad, or Android device over your home network. 设置Xbox One…

WPF ABP框架更新日志(最新2022-11月份)

更新说明本次更新内容包含了WPF客户端以及Xamarin.Forms移动端项目, 更新内容总结如下:WPF 客户端修复启动屏幕无法跳转异常修复添加好友异常修复托盘图标状态更新异常优化好友发送消息时状态检测更新聊天窗口UI风格更新好友列表得头像显示更新聊天窗口消息日期分组显示更新系统…

JSONObject和JSONArray 以及Mybatis传入Map类型参数

import org.json.JSONArray;import org.json.JSONObject;将字符串转化为JSONArray JSONArray jsonArray new JSONArray(deviceInfo); //注意字符串的格式将JSONArray转化为JSONObject类型 JSONObject jsonObject jsonArray.getJSONObject(0);将值存入Map Map<String,S…

十月cms_微软十月更新失败使整个PC行业陷入困境

十月cmsMicrosoft still hasn’t re-released Windows 10’s October 2018 Update. Now, PC manufacturers are shipping PCs with unsupported software, and Battlefield V is coming out next week with real-time ray-tracing technology that won’t work on NVIDIA’s RT…

让Visual Studio 2013为你自动生成XML反序列化的类

Visual Sutdio 2013增加了许多新功能&#xff0c;其中很多都直接提高了对代码编辑的便利性。如&#xff1a; 1. 在代码编辑界面的右侧滚动条上显示不同颜色的标签&#xff0c;让开发人员可以对所编辑文档的修改、查找、定位情况一目了然。而不用像往常一样上下不停地拖动滚动条…

20年的 .NET ,更需要 00 后的你

.NET 20 周年&#xff0c; 在国内有一大批和 .NET 一起成长的开发者&#xff0c;有一大批在不同行业采用 .NET 作为解决方案的企业。或者你会经常听到很多的大神说他的 .NET 经历&#xff0c;也会听到 .NET “牛逼” 的故事&#xff0c;更会听到用 .NET 不用“996”的神话。但对…

UIT创新科存储系统服务“500强”汽车名企

信息化已成为汽车产业链各企业提高市场竞争力和传统汽车产业谋求转型升级的推动力&#xff0c;无论是汽车生产商&#xff0c;还是汽车服务商和零配件生产商&#xff0c;无不重视信息化系统的建设。某全球汽车行业著名的零配件生产商&#xff0c;财富500强企业之一&#xff0c;从…

通过从备份中排除这些文件夹来节省Time Machine驱动器上的空间

Are you getting notifications about a full Time Machine drive? Do you feel like your backups are taking too long? A bigger, faster hard drive might be the best solution, but you can also help by excluding particular folders from your backups. 您是否收到有…

c#调用触滑输入法实现触摸屏键盘功能

背景最近在做一个项目&#xff0c;用户端是触摸屏&#xff0c;涉及到一些表单数据的操作&#xff0c;因为是没有外接的鼠标键盘&#xff0c;所以想着当用户在操作表单的时候&#xff0c;能够把软件键盘输入法给调出来使用。什么是触滑输入法触滑输入法Swype&#xff0c;是针对触…

Teradata天睿公司推出适用各种部署环境的全球最强分析数据库

Teradata天睿公司&#xff08;Teradata Corporation&#xff0c;纽交所&#xff1a;TDC&#xff09;推出Teradata Everywhere™&#xff0c;成为业内首家在多种公有云、托管云和本地部署环境下部署全球最强海量并行处理&#xff08;MPP&#xff09;分析数据库的厂商。这些部署环…

如何使用智能铃声避免在Android中令人尴尬的大声铃声

Choosing a ringtone volume can be hard – there is no one setting that is right for all environments. What works perfectly at home may be too quiet for when you’re on the train, but too loud for the office. Intelligent Ringer can be used to adjust ringto…

为什么要把类设置成密封?

前几天笔者提交了关于FasterKvCache的性能优化代码&#xff0c;其中有一个点就是我把一些后续不需要继承的类设置为了sealed密封类&#xff0c;然后就有小伙伴在问&#xff0c;为啥这个地方需要设置成sealed&#xff1f;提交的代码如下所示&#xff1a;一般业务开发的同学可能接…

Java 打飞机(小游戏)[版权非本人 本人制作收藏整理]

今天在网络上 看到一个纯java的小游戏 代码copy到 myeclipse中 居然效果还不错 这是一些效果图 当然了 图片是我自己找的 有心兴趣的朋友可以做的好看一点 具体的代码 都放在自己的文件里去了 那么可以去下载 https://i.cnblogs.com/Files.aspx 转载于:https://www.cnblogs…

nest 架构_当有人打来您的Nest Hello时,如何让Google Home通知您

nest 架构The Nest Hello can alert you on your phone whenever someone rings your doorbell, but if you have a Google Home, you can also have Google Assistant audibly announce that someone is at the door. 无论何时有人按下门铃&#xff0c; Nest Hello都会在电话上…

如何序列化派生类

前言假设有一个 Person 抽象基类&#xff0c;其中包含 Student 和 Teacher 派生类&#xff1a;public class Person {public string Name { get; set; } }public class Student : Person {public int Score { get; set; } }public class Teacher : Person {public string Title…

nexus 手动增加_如何使用Google的工厂图像手动升级Nexus设备

nexus 手动增加Google’s Nexus devices are supposed to receive timely updates, but the staggered rollout means it can take weeks for devices to receive over-the-air (OTA) updates. Luckily, there’s a faster (and geekier) way to install the latest version of…

WPF-16 图形处理

我们这节主要介绍WPF常用画图标签&#xff0c;由于WPF图形处理设计大量篇幅 ,我们在这里抛砖引玉&#xff0c;具体更多的学习资料链接https://github.com/microsoft/WPF-Samples/tree/master/Graphics 该链接中微软提供了大量的学习Demo&#xff0c;WPF图形处理最大的区别在于…

纯CSS制作各种各样的网页图标(三角形、暂停按钮、下载箭头、加号等)

三角形 <div class"box"></div> <style>.box{ width: 0;height: 0;border-top: 50px solid transparent;border-bottom: 50px solid transparent;border-left: 50px solid transparent;border-right: 50px solid red; } </style> 平行四边形…

您的MyFitnessPal帐户几乎肯定已被黑客入侵,请立即更改密码

If you’re one of the millions of the 150 million MyFitnessPal users, bad news: hackers have your email address, your user name, and your hashed password. 如果您是1.5亿MyFitnessPal用户中的数百万用户之一&#xff0c;那么这是个坏消息&#xff1a;黑客拥有您的电…