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

时间:2018-09-25 06:55:48

标签: c# nuget nuget-package debug-symbols

所以我真的很想找出答案。

我有一个包含几个项目的解决方案,例如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之类的标签来执行此操作,但无济于事。

我也尝试了> dotnet pack A.csproj --include-symbols --include-source,并生成了A.nupkgA.symbols.nupkg,但是在符号内,只有A.pdb而不是B.pdb和{{ 1}}。

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

TLDR:我已经看到了很多潜在的解决方案,但是到目前为止,没有一个可行。

我最后的求助方法可能是:仅将B和C的所有内容添加到A,以便只剩下一个项目,或者创建一个powershell脚本以手动添加C.pdb中的所有pdb。当然,如果有的话,我想要一个更简单的解决方案。

1 个答案:

答案 0 :(得分:0)

应该起作用的步骤:

  1. 确保引用确实是 project 引用,并且不直接引用内置的DLL。

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

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

如果这不能按预期工作,我建议提供其他详细信息,例如'A'的csproj文件以及尝试的任何nuspecs。