簡體   English   中英

將項目引用的 PDB 文件包含到 nuget 包中

[英]Including project referenced PDB files into nuget package

我正在嘗試使用 dotnet pack 命令將項目引用的 PDB 文件包含到 Nuget 包中。

我找到了將項目引用的 DLL 文件包含到 nuget 包中的解決方案。 這需要向 .csproj 文件添加一些代碼。 我也試圖讓它與 .pdb 文件一起工作,但這不起作用。

此代碼僅將 *.dll 文件復制到 nuget。

<Target Name="CopyProjectReferencesToPackage" DependsOnTargets="ResolveReferences">
  <ItemGroup>
    <BuildOutputInPackage Include="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference'))"/>
  </ItemGroup>
</Target>

這是我嘗試過的,但 *.pdb 文件在 nuget 中不可見。

<Target Name="CopyProjectReferencesToPackage" DependsOnTargets="ResolveReferences">
  <ItemGroup>
    <BuildOutputInPackage Include="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference')->Replace('.dll', '.pdb'))"/>
  </ItemGroup>
</Target>

解決方案

我已經資助了復制引用的 PDB 的解決方案 - 只需將此行添加到您的 .csproj 文件中:

<Target Name="CopyPdbToPackage" Inputs="@(ReferenceCopyLocalPaths-&gt;WithMetadataValue('ReferenceSourceTarget', 'ProjectReference'))" Outputs="%(ProjectReference.Identity)" AfterTargets="CopyProjectReferencesToPackage">
    <PropertyGroup>
        <CurrentReference>%(ProjectReference.Identity)</CurrentReference>
        <CurrentReferenceName>$([System.IO.Path]::GetFileNameWithoutExtension($(CurrentReference)))</CurrentReferenceName>
    </PropertyGroup>

    <Message Text="Copying PDB of $(CurrentReferenceName) to packages..." Importance="high" Condition="'%(ProjectReference.NugetIgnore)'!='true'" />

    <ItemGroup>
        <AllItems Include="@(ReferenceCopyLocalPaths-&gt;WithMetadataValue('OriginalProjectReferenceItemSpec', '$(CurrentReference)'))" />
        <PdbFiles Include="%(AllItems.Identity)" Condition="@(AllItems-&gt;EndsWith('.pdb'))=='true'" />
    </ItemGroup>
    <ItemGroup>
        <TfmSpecificPackageFile Include="@(PdbFiles)" Condition="'%(ProjectReference.NugetIgnore)'!='true'">
            <PackagePath>lib/$(TargetFramework)</PackagePath>
        </TfmSpecificPackageFile>
    </ItemGroup>
</Target>

但是有一個問題,"main" nuget 項目的 PDB 沒有被復制......

下面的配置實際上是對您將 DLL 路徑轉換為 ​​PDB 路徑的最初想法的修復。 PDB 文件未出現在生成的 nuget 包中的原因是輸出文件在后續過程中被進一步過濾(請參閱AllowedOutputExtensionsInPackageBuildOutputFolder )。 幸運的是,我們可以自定義應該保留哪些擴展。

請參閱下面的最終配置。 它生成一個包含編譯項目的 DLL/PDB 和引用項目的 DLL/PDB 的包。

<PropertyGroup>
  <!--Include Project References output-->
  <TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);CopyProjectReferencesToPackage</TargetsForTfmSpecificBuildOutput>

  <!--Allow certain extensions-->
  <AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
</PropertyGroup>

<Target DependsOnTargets="ResolveReferences" Name="CopyProjectReferencesToPackage">
  <ItemGroup>
    <!--Include DLLs of Project References-->
    <BuildOutputInPackage Include="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference'))"/>

    <!--Include PDBs of Project References-->
    <BuildOutputInPackage Include="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference')->Replace('.dll', '.pdb'))"/>
  </ItemGroup>
</Target>

您可以強制命令包含符號。

--include-symbols

最終命令例如:

dotnet pack -c Debug --include-symbols

這包括包中的 *.pdb 文件。 您可以在此處閱讀有關包含符號的更多信息

編輯:我的回答不符合問題要求。 請閱讀此消息的評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM