本文來告訴大家如何在專案檔案里面添加上 EmbedAllSources 屬性,將自己的代碼嵌入到 PDB 符號檔案里面,讓開發者們在除錯的時候,可以看到庫的源代碼
是否記得 PDB 符號檔案的作用?符號檔案將會記錄著 DLL 檔案里面的二進制內容和源代碼之間的對應,根據 PDB 符號檔案將可以關聯上 DLL 和源代碼,假設此時既有 PDB 符號檔案,又有源代碼,那自然就可以在除錯的時候進入源代碼進行除錯
為了減少誤解,必須說明的是,有 PDB 符號檔案,可以方便進行代碼關聯除錯,對于 .NET 的應用,沒有 PDB 符號檔案,依然可以愉快除錯,原因是 .NET 的 DLL 里面自帶了足量的資訊,但是有 PDB 符號檔案的話,除錯更好評
默認的發布的庫,都是不會帶上源代碼的,此時空有 PDB 符號檔案,還不能愉快除錯源代碼,好在咱可以使用 EmbedAllSources 屬性,將源代碼嵌入到 PDB 符號檔案里面,此時在 VisualStudio 2019 除錯,將可以通過 PDB 檔案除錯進入到對應的源代碼
將源代碼放入到 PDB 符號檔案的方法很簡單,只需要在 csproj 專案檔案添加如下代碼即可
<EmbedAllSources>true</EmbedAllSources>
默認的 NuGet 包是不帶 PDB 符號檔案的,官方推薦將 PDB 符號檔案打到 snupkg 里面再推送,如果期望只作為一個 NuGet 包,可以加上如下代碼也將符號檔案放入 NuGet 里面,使用下面代碼可以將 PDB 符號檔案放入 NuGet 包,也將源代碼打包壓縮嵌入在 PDB 符號檔案里面
<PropertyGroup>
<EmbedAllSources>true</EmbedAllSources>
<!-- Include symbol files (*.pdb) in the built .nupkg -->
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
</PropertyGroup>
更改之后的 csproj 專案檔案內容大概如下
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<TargetFrameworks>net45;netcoreapp3.1</TargetFrameworks>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<UseWpf>True</UseWpf>
<UseWindowsForms>True</UseWindowsForms>
</PropertyGroup>
<PropertyGroup>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<EmbedAllSources>true</EmbedAllSources>
<!-- Include symbol files (*.pdb) in the built .nupkg -->
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
</PropertyGroup>
加上了 EmbedAllSources 就可以看到輸出的 PDB 符號檔案的體積比之前更大,原因是加上了源代碼檔案
在有嵌入源代碼的符號檔案,就可以在除錯的時候,自動進入到源代碼,但是和有源代碼的除錯不同的在于,此時的源代碼是不支持更改邏輯的,另一個不足在于當前只支持 cs 等代碼檔案,還不支持 xaml 檔案
此功能其實也是 SourceLink 的一個功能,需要 VisualStudio 2019 新版本才能支持,如果自己的代碼是開源的,也可以通過 SourceLink 鏈接到 GitHub 等的方式,這樣可以減少 NuGet 包的下載大小,詳細請看 dotnet 使用 SourceLink 將 NuGet 鏈接源代碼到 GitHub 等倉庫
其實將源代碼放入 PDB 檔案會比使用 SourceLink 鏈接到 GitHub 上更好,原因是從 GitHub 上拉代碼的速度不如下一個大的 NuGet 檔案
更多關于 Roslyn 請看 手把手教你寫 Roslyn 修改編譯
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/293283.html
標籤:C#
