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.pswp.cn/news/280842.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280842.shtml
英文地址,請注明出處:http://en.pswp.cn/news/280842.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C# 讀取文件內容/輸出txt log

逐行讀 jsonString string.Empty;if (File.Exists(jsonFile)){StreamReader sr new StreamReader(jsonFile, Encoding.UTF8);string line string.Empty;while ((line sr.ReadLine()) ! null){jsonString line;}sr.Close();} 全讀取 string text File.ReadAllText("…

樹形dp-CF-337D. Book of Evil

題目鏈接: http://codeforces.com/problemset/problem/337/D 題目大意: 給一棵樹,m個點,一個距離d,求有多少個點A,使得A到所有的m個點距離都不超過d. 解題思路: 樹形dp. 有兩種方法可以解: 1、類…

運行時獲取類庫信息

運行時獲取類庫信息Intro在我們向別的開源項目提 issue 的時候,可能經常會遇到別人會讓我們提供使用的版本信息,如果別的開源項目類庫集成了 source link,我們可以從程序集信息中獲取到版本以及對應的 commit 信息,這樣我們就可以…

Oracle數據表中輸入引號等特殊字符

Oracle輸入特殊字符的特殊方法: UPDATE BOOKMARK SET BM_VALUEq/ --在這里寫下需要輸入的內容(可以包括引號、回車等特殊的符號),所見即所得 / -- WHERE BM_NAMEXX

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…

PS2019工具介紹筆記(一)

通用快捷鍵 ALT鼠標滾輪放大縮小 空格按左鍵 移動圖片 一、新建 PPI 顯示器72PPI 印刷(國際通用分辨率)300PPI 海報高清寫真96-200PPI 大型噴繪25-50PPI 顏色模式 RGB(紅綠藍) CMYK(青洋紅黃黑)印刷業 二、移動工具 ctrlT 圖形自由變換 alt…

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…

ab 測試工具

ab&#xff0c;即Apache Benchmark&#xff0c;在Apache的安裝目錄中找到它。安裝目錄/bin/ab.exe。ab -n 數字 -c 數字 url路徑我們對位于本地Apache服務器上、URL為localhost/index.php的頁面進行壓力測試。測試總次數為1000&#xff0c;并發數為100(相當于100個用戶同時訪問…

bat批處理筆記(二)

eof 是“end of file”的縮寫 在批處理作用主要有二&#xff1a; 1、在無call的情況下&#xff0c;會直接退出批處理&#xff0c;此時等同于exit 2、在call的情況下&#xff0c;會中止call&#xff0c;繼續執行其他命令 echo off call :str1 pause goto :eof echo //此行代…

讓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;分析數據庫的廠商。這些部署環…

[轉載]C/C++框架和庫

C/C框架和庫 裝載自:http://blog.csdn.net/xiaoxiaoyeyaya/article/details/42541419值得學習的C語言開源項目 Webbench Webbench是一個在linux下使用的非常簡單的網站壓測工具。它使用fork()模擬多個客戶端同時訪問我們設定的URL&#xff0c;測試網站在壓力下工作的性能&#…

如何使用智能鈴聲避免在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;一般業務開發的同學可能接…