探索 .Net Core 的 SourceLink

語言: CN / TW / HK

介紹

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 一起做了現在的版本。

官網地址: http://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以上版本,然後做一下簡單的設定

開啟 工具 -> 選項 -> 除錯, 勾選 啟用源連結支援,取消勾選 啟用僅我的程式碼

[2]

設定符號包(symbol packages) 的地址,它包含了原始碼檔案的url地址

[3]

Newtonsoft.Json 是我經常使用的一個軟體包, 也是 Nuget 下載量第一的包,我想看一下它的原始碼,瞭解如何進行序列化的,我新建了一個 .Net Core 的控制檯專案,現在斷點在序列化的這一步

[4]

現在直接 F11 逐語句除錯, 第一次的話,由於網路原因,可能會比較慢,等待即可

[5]

現在直接進入到了 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

[6]

右鍵專案編輯專案檔案, 編輯csproj檔案

 <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <PublishRepositoryUrl>true</PublishRepositoryUrl>
    <IncludeSymbols>true</IncludeSymbols>
    <SymbolPackageFormat>snupkg</SymbolPackageFormat>
  </PropertyGroup>

然後需要提交 git,推送程式碼。準備工作完成後,專案右鍵,直接打包,會同時生成 .nupkg 和 .snupkg(符號包)

[7]

開啟 .snupkg 檔案,檢視 PDB Sources, 發現pdb 檔案包含了原始碼檔案的url地址

[8]

然後同時上傳到 Nuget.org, 上傳成功後,會同時有 package 和 symbols 的下載標識

[9]

到這裡為止,一個支援source link 的nuget包已經發布成功了,你可以用同樣的方式進行原始碼除錯

打個廣告

HttpReports 是針對.Net Core 開發的輕量級APM系統, 基於MIT開源協議,針對於微服務場景,主要功能包括統計,分析,拓撲圖,告警, 鏈路監控,請求日誌等,感興趣的同學可以點個 Star 關注下,謝謝

Github地址:http://github.com/dotnetcore/HttpReports

線上預覽:http://122.51.188.23:8080 賬號: admin 密碼 123456