如何为多项目 Nuget 包创建符号?

Posted

技术标签:

【中文标题】如何为多项目 Nuget 包创建符号?【英文标题】:How to create symbols for multi-project Nuget package? 【发布时间】:2018-09-25 06:55:47 【问题描述】:

所以我真的很难弄清楚这一点。

我有一个包含几个项目的解决方案,比如 A、B 和 C。A 引用并使用 B 和 C(都是项目引用)。我想从 A 创建一个 Nuget 包,我成功地做到了,尽管我不得不跳几圈,使用这样的东西:

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

但是,我还想通过我的 Nuget 包进行调试,所以我找到了一些技巧来做到这一点。一种是将 pdb 复制到 nupkg 中,尽管不建议这样做。它应该适用于这个line in your csproj file。这会将 pdb 添加到 nupkg,但仅添加了 A.pdb

否则可以/应该创建一个A.symbols.nupkg 文件。我尝试使用DebugSymbolsDebugTypeEmbedSourcesIncludeSymbolsInPackage 等标签来做到这一点,但无济于事。

我还尝试了&gt; dotnet pack A.csproj --include-symbols --include-source,它会生成A.nupkgA.symbols.nupkg,但在符号内,只有A.pdb 而不是B.pdbC.pdb

所以我想我的问题是:如何从可以调试的多项目解决方案创建一个 nuget 包(因此包括 pdb 或符号/源,不是一个,而是来自所有引用的项目)?

TLDR:我已经看到了很多潜在的解决方案,但到目前为止,都没有奏效。

Nuget git issue thread StackExchange thread Some blog on GeekLearning.io 还有更多...

我最后的一些办法可能是:只需将 B 和 C 的所有内容添加到 A,这样就只剩下一个项目,或者创建一个 powershell 脚本来手动将所有 pdb 添加到A.symbols.nupkg。当然,如果有的话,我想要一个更直接的解决方案。

【问题讨论】:

什么是 B 和 C? Nuget 包、项目引用或二进制引用 @Troopers 项目参考 您可以尝试使用 Nuget 包(A 引用 B 和 C 作为 Nuget 包)并生成带有 A、B 和 C 符号的包 你有什么类型的项目? .NET 核心?哪个版本? 【参考方案1】:

应该起作用的步骤:

    确保引用确实是项目引用,而不是直接引用已构建的 DLL。

    确保在构建后将所有 PDB 复制到输出文件夹。

    使用您尝试过的任一方法(符号包或硬编码包含 .pdb 扩展名)。

如果这没有按预期工作,我建议提供其他详细信息,例如“A”的 csproj 文件和尝试的任何 nuspecs。

【讨论】:

以上是关于如何为多项目 Nuget 包创建符号?的主要内容,如果未能解决你的问题,请参考以下文章

如何为NuGet创建手动VSTS版本?

创建多目标 Xamarin.Forms NuGet 包

如何为多模块项目创建汇总的 Jacoco 报告?

NuGet - 在单一解决方案中管理和删除多版本包

如何为多平台phonegap/cordova开发组织代码

如何为多色线创建基本图例?