本文告訴大家如何修複 VisualStudio 建構時沒有将 NuGet 的 PDB 符号檔案拷貝到輸出檔案夾的問題。如果 VisualStudio 建構時沒有将 NuGet 的 PDB 符号檔案拷貝到輸出檔案夾,那将會在調試的時候,由于找不到 PDB 符号檔案而加載符号失敗
盡管這個坑從 2017 到現在,來來回回修了好多次,有某些時候能拷貝,有某些時候就隻認 symbol 的 NuGet 包,有時候無論什麼包都不認。本文将告訴大家如何強行設定拷貝 PDB 符号檔案
方法是在自己的項目的 csproj 項目檔案夾裡面添加如下代碼
<Target Name="IncludeSymbolFromReferences"
AfterTargets="ResolveAssemblyReferences"
Condition="@(ReferenceCopyLocalPaths) != ''">
<ItemGroup>
<ReferenceCopyLocalPaths
Include="%(ReferenceCopyLocalPaths.RelativeDir)%(ReferenceCopyLocalPaths.Filename).pdb"
DestinationSubDirectory="%(ReferenceCopyLocalPaths.DestinationSubDirectory)" />
<ReferenceCopyLocalPaths Remove="@(ReferenceCopyLocalPaths)"
Condition="!Exists('%(FullPath)')" />
</ItemGroup>
</Target>
複制
以上代碼表示在 ResolveAssemblyReferences 的時候,執行 IncludeSymbolFromReferences 任務,這個任務裡面,将會嘗試去找所有的引用的
pdb
檔案,如果找到了,就放入到輸出拷貝裡面
如此即可在建構時,将引用的 NuGet 包的 DLL 對應 PDB 檔案拷貝到輸出檔案夾,而不需要關注具體的架構版本
當然,在每個項目都拷貝以上的代碼也不是好主意。以上的代碼被 SimonCropp 大佬封裝到了 https://github.com/SimonCropp/Cymbal 倉庫裡面,作為 NuGet 包釋出,隻需要通過 NuGet 管理器安裝
Cymbal
即可