探索 .Net Core 的 SourceLink
- 2020 年 11 月 17 日
- 筆記
介紹
Source Link是一組軟體包和一個規範, 它將一些元數據添加到PDB文件,以將本地文件重新映射到GitHub上的文件,因此Visual Studio可以在這需要時下載文件, 該項目的目的是可以為使用Nuget安裝軟體的用戶提供源程式碼調試, Microsoft庫(例如.NET Core和Roslyn)都已啟用Source Link。
使用NuGet包是向項目添加依賴項的一種非常方便的方法,但是,當您遇到NuGet軟體包的問題並想對其進行調試時,會有點麻煩,你可能需要從在github 查看源程式碼,或者直接git clone到本地, Visual Studio 2017 15.3以上版本中已經集成了Source Link , 現在你可以非常方便的在VS中調試 .Net Core 和 Nuget分發的軟體包的源程式碼,並且不需要安裝 ReSharper 這些工具,這是非常愉快的源程式碼調試體驗。
sourcelink 最初的版本是 @ctaggart 實現的,看了下,原項目已存檔, 然後 .Net 團隊開始注意到這個項目,和 ctaggart 一起做了現在的版本。
官網地址: //github.com/dotnet/sourcelink
SourceLink 支援一下幾種源程式碼來源:
-
github.com and GitHub Enterprise
-
GitLab
-
Azure Repos (former Visual Studio Team Services)
-
Azure DevOps Server (former Team Foundation Server)
-
Bitbucket
快速使用
必須滿足 Visual Studio 2017 15.3以上版本,然後做一下簡單的設置
打開 工具 -> 選項 -> 調試, 勾選 啟用源鏈接支援,取消勾選 啟用僅我的程式碼
設置符號包(symbol packages) 的地址,它包含了源程式碼文件的url地址
Newtonsoft.Json 是我經常使用的一個軟體包, 也是 Nuget 下載量第一的包,我想看一下它的源程式碼,了解如何進行序列化的,我新建了一個 .Net Core 的控制台項目,現在斷點在序列化的這一步
現在直接 F11 逐語句調試, 第一次的話,由於網路原因,可能會比較慢,等待即可
現在直接進入到了 Newtonsoft.Json 的源程式碼, 它將無縫地讓我繼續調試會話,非常方便, 如果您在公司內部使用Gitlab, Devops或在開源環境中發布了NuGet,則絕對應該使用SourceLink。
它的路徑在 C:\Users\Spring Lee\AppData\Local\SourceServer\c15d6df0a4a5956040073c3613425e76998a1599e7eeac2338c52ed35d1a47b7\Src\Newtonsoft.Json\JsonSerializer.cs
在項目中使用SourceLink
接下來我會創建一個 netstandard2.0 版本的類庫項目,它的源碼放在了github,並且我會發布到 Nuget.org,當然其他方式(Azure Devops,Gitlab) 也是支援的,讓它支援SourceLink
創建完成後,首先需要引入 Microsoft.SourceLink.GitHub
右鍵項目編輯項目文件, 編輯csproj文件
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
</PropertyGroup>
然後需要提交 git,推送程式碼。 準備工作完成後,項目右鍵,直接打包,會同時生成 .nupkg 和 .snupkg(符號包)
打開 .snupkg 文件,查看 PDB Sources, 發現pdb 文件包含了源程式碼文件的url地址
然後同時上傳到 Nuget.org, 上傳成功後,會同時有 package 和 symbols 的下載標識
到這裡為止,一個支援source link 的nuget包已經發布成功了,你可以用同樣的方式進行源程式碼調試
打個廣告
HttpReports 是針對.Net Core 開發的輕量級APM系統, 基於MIT開源協議,針對於微服務場景,主要功能包括統計,分析,拓撲圖,告警, 鏈路監控,請求日誌等,感興趣的同學可以點個 Star 關注下,謝謝
Github地址://github.com/dotnetcore/HttpReports
在線預覽: //122.51.188.23:8080
帳號: admin 密碼 123456