運行時獲取類庫信息

運行時獲取類庫信息

Intro

在我們向別的開源項目提 issue 的時候,可能經常會遇到別人會讓我們提供使用的版本信息,如果別的開源項目類庫集成了 source link,我們可以從程序集信息中獲取到版本以及對應的 commit 信息,這樣我們就可以直接找到對應版本的 commit 對應的代碼版本,這樣也就可以更加方便的了解對應源碼了

那我們是不是也可以在運行時獲取類庫的 commit 信息呢,答案是肯定的

Sample

我們集成了 source link 的話,在程序集信息中是可以獲取到 git 相關的信息, source link 的單步調試也是基于此來擴展的調試時下載對應源文件的

這里是我集成了 source link 的一個開源項目,反編譯 dll 的時候可以看到一些 git 相關的信息

26bf39f1ba556ac86d6390985c5eda81.png

AssemblyInfomationVersion 中的信息由兩部分組成,一部分是原始的 package 版本號,另外一部分是對應 commit hash,我們結合 RepositoryUrl 就可以很方便的找到對應的代碼了

RepositoryUrl 則是在一個 AssemblyMetadata 的 attribute 中

Implement

我們可以定義一個 model 來表示程序集的信息,這樣以后擴展起來也會更加的方便,示例如下:

public?class?LibraryInfo
{public?required?Version?LibraryVersion?{?get;?init;?}public?required?string?LibraryHash?{?get;?init;?}public?required?string?RepositoryUrl?{?get;?init;?}
}

然后通過反射從程序集中獲取程序集的信息

public?static?LibraryInfo?GetLibraryInfo(Assembly?assembly)
{Guard.NotNull(assembly);var?assemblyInformation?=?assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>();var?repositoryUrl?=?assembly.GetCustomAttributes<AssemblyMetadataAttribute>().FirstOrDefault(x?=>?nameof(LibraryInfo.RepositoryUrl).Equals(x.Key))?.Value????string.Empty;if?(assemblyInformation?is?not?null){var?informationalVersionSplit?=?assemblyInformation.InformationalVersion.Split('+');if?(Version.TryParse(informationalVersionSplit[0],?out?var?version)){return?new?LibraryInfo(){LibraryVersion?=?version,LibraryHash?=?informationalVersionSplit.Length?>?1???informationalVersionSplit[1]?:?string.Empty,RepositoryUrl?=?repositoryUrl};}}return?new?LibraryInfo(){LibraryVersion?=?assembly.GetName().Version!,LibraryHash?=?string.Empty,RepositoryUrl?=?repositoryUrl};
}

為了使用方便添加一個根據類型獲取的 overload

public?static?LibraryInfo?GetLibraryInfo(Type?type)?=>?GetLibraryInfo(Guard.NotNull(type).Assembly);

More

使用 dotnet-exec ?來測試一下

dotnet-exec?'ApplicationHelper.GetLibraryInfo(typeof(WeihanLi.Npoi.CsvHelper))'?--reference?"nuget:WeihanLi.Npoi,2.4.2"

51df1d9f6df33947f0f3b63cb3b4421d.png

從輸出結果我們可以看到我們已經拿到 commit hash 和 RepositoryUrl 信息了,對應的 Github commit 地址就是:https://github.com/WeihanLi/WeihanLi.Npoi/tree/8e2c1dee6efee9b7b4b12f16272f266c9ad09233

最后還是建議大家在自己開源類庫項目中集成 source link,不僅方便調試,還可以比較方便準確的獲取對應版本的 commit 信息,這樣別人使用遇到問題的話也會比較方便的進行 debug 和查找源代碼

References

  • https://github.com/dotnet/sourcelink

  • https://github.com/WeihanLi/WeihanLi.Common/blob/1.0.58/src/WeihanLi.Common/Helpers/ApplicationHelper.cs

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/280839.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280839.shtml
英文地址,請注明出處:http://en.pswp.cn/news/280839.shtml

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

相關文章

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

Oracle輸入特殊字符的特殊方法: UPDATE BOOKMARK SET BM_VALUEq/ --在這里寫下需要輸入的內容&#xff08;可以包括引號、回車等特殊的符號&#xff09;,所見即所得 / -- 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;一般業務開發的同學可能接…

powershell 常用命令筆記

常用集合&#xff0c;方便后續復制粘貼 # 判斷文件在不在 # 輸出文件 IF(!(test-path $filePath)) {$result|Out-File $filePath }# 讀取txt $result(Get-Content $filePath -TotalCount 1).Trim() $result# 刪除文件 remove-item "C:\wistron\Datasource\spiderPort.txt…

Linux 性能監控 : CPU 、Memory 、 IO 、Network

一、CPU 1.良好狀態指標 CPU利用率&#xff1a;User Time < 70%&#xff0c;System Time < 35%&#xff0c;User Time System Time < 70% 上下文切換&#xff1a;與CPU利用率相關聯&#xff0c;如果CPU利用率狀態良好&#xff0c;大量的上下文切換也是可以接受的 可…

Java 打飛機(小游戲)[版權非本人 本人制作收藏整理]

今天在網絡上 看到一個純java的小游戲 代碼copy到 myeclipse中 居然效果還不錯 這是一些效果圖 當然了 圖片是我自己找的 有心興趣的朋友可以做的好看一點 具體的代碼 都放在自己的文件里去了 那么可以去下載 https://i.cnblogs.com/Files.aspx 轉載于:https://www.cnblogs…