如何打包和部署带有符号和源代码的 NuGet 包,以便调试器可以使用该源代码?

How to package and deploy a NuGet package with symbols and source code so that debugger can use THAT source code?

我从 .net 框架 visual studio Class 库项目创建了一个非常简单的 NuGet 包,其中 class 库源代码在 C# 中。

我使用这个命令创建了 nuget 包:

nuget pack MyProject.csproj -symbols -Properties "Configuration=Debug" -suffix debug

如我所料,它创建了两个 nuget 包文件,即:

除了 "symbols" 包含 lib 层次结构中的 pdb 文件和 src 文件夹中的源文件之外,这些包基本相同。

鉴于重复,我将文件 MyProject.1.0.0-debug.symbols.nupkg 重命名为 MyProject.1.0.0-debug.nupkg,这会覆盖其中一个文件,这没什么大不了的。我现在有一个包含 PDB 和源文件的常规命名包。

我将其部署到内部文件共享提要:

nuget add MyProject.1.0.0-debug.nupkg \InternalShare\FeedFolder

在一个完全不同的项目和不同的解决方案中,我现在使用 NuGet 包管理器在 Visual Studio 中使用该 NuGet 包。一切都很好。并且代码也工作正常,在我的例子中,我制作了一个简单的控制台应用程序,它在包中使用了几个 classes 并且我已经证明它正确地使用它们并且没有发生意外。

到目前为止一切顺利。

现在我在消费代码中设置断点,并尝试进入源代码调试包。它似乎工作正常,但实际上,它并没有进入随包分发的源代码。它实际上从包的创建进入原始源,在我的机器上一个完全不同且不相关的文件夹层次结构中。

好的。所以现在我在 separate 没有原始源的计算机上重新创建我的简单控制台应用程序。在位于内部网络并因此可以访问文件共享的那台单独的计算机上,我使用了 NuGet 程序包,并且再次编译,一切正常。

然而,当我尝试在 visual studio 调试器中单步执行包源代码时,它根本不起作用。调试器找不到源代码,即使它就在包文件夹中。 (调试器提供反汇编代码——不是很有帮助)。

这似乎应该是一个常见的用例,并且希望在 nuget 包中包含符号和源代码,所以我一定是做了一些愚蠢的事情,以至于调试器找不到源代码。

各种版本的东西:

我的错误是什么?

非常感谢。

================== 添加信息 2019 年 4 月 17 日,3:30pm 太平洋 ============= ==========

这并没有我想象的那么糟糕。当我尝试进入代码并说找不到它时,我有机会浏览到代码,这样我就可以浏览到包(假设我知道它在哪里!)并松开调试器并一切正常。好的是 Visual Studio 似乎记得我浏览过的地方并且知道下次去那里看。不确定该机制。

AND... 如果我转到原来的计算机(上面有实际的包源),如果我更改了初始源,就像我正在为下一个包做准备一样,调试器(当然)会意识到来源已更改,同样提示我在其他地方寻找合适的来源。

不过,如果不必像那样跳来跳去就好了,所以我仍然会很感激任何进一步的见解。

一些基础知识:

  • 调试器需要 PDB 来启用调试
  • 符号包应包含 PDB(它不仅仅是具有不同扩展名的包)
  • 此符号包应发布到符号存储库,Visual Studio 调试器可以从
  • 请求符号

下一个:

  1. 看到这个 doc for creating and publishing symbols package 到 nuget.org (.snupkg)
  2. 然后,看这个doc for configuring visual studio to for using NuGet.org as a symbol source (use this value when adding a symbol server https://symbols.nuget.org/download/symbols)

早在 2019 年 2 月,它就可以正常工作。这里没有提到的一些东西和我添加到 csproj 文件的是

<DebugSymbols>true</DebugSymbols>
<EmbedAllSources>true</EmbedAllSources>
<DebugType>portable</DebugType>

我用nuget打包,使用的命令是:

nuget pack mynuget.nuspec -Symbols -SymbolPackageFormat snupkg

我当时使用的是 VS 15.9.4 和 nuget 4.9.3 有了这个我可以从网络路径成功调试 nuget。不确定在最近的版本中发生了什么变化,它现在不起作用。