天天看點

修複 VisualStudio 建構時沒有将 NuGet 的 PDB 符号檔案拷貝到輸出檔案夾

本文告訴大家如何修複 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

即可