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

标签 c# visual-studio visual-studio-2017 nuget visual-studio-debugging

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

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

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

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

  • MyProject.1.0.0-debug.symbols.nupkg
  • MyProject.1.0.0-debug.nupkg

除了带有“符号”的包包括 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 包。一切都很好。代码也工作正常,在我的例子中,我制作了一个简单的控制台应用程序,它使用了包中的几个类,我已经证明它正确地使用了它们,没有发生任何事故。

到目前为止一切顺利。

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

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

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

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

事物的各种版本:

  • Visual Studio:专业版 2017 15.9.11
  • 安装在 VS 中的 NuGet 包管理器:4.6.0
  • CLI NuGet 版本:4.8.1.5435
  • 我的示例代码的目标 .NET Framework:4.6.1

我的错误是什么?

非常感谢。

================== 添加信息 2019 年 4 月 17 日,太平洋时间下午 3:30 ================= ======

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

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

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

最佳答案

早在 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。不确定最近的版本有什么变化,它现在不起作用。

关于c# - 如何打包和部署带有符号和源代码的 NuGet 包,以便调试器可以使用该源代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55736447/

相关文章:

c# - 如何使用 Project Oxford 的语音 API 将解决方案实现到 WPF 应用程序中?

c# - 在 C# 中使用身份验证复制文件

c++ - rc.exe 不再在 VS 2015 命令提示符中找到

visual-studio - TFS 映射到本地文件夹问题

c++ - VC++ 实验模块不起作用

c - 为什么我的代码在 Visual Studio 中返回 -nan,但在 Linux 中不返回?

c# - 运行 libvlcnet 时出错(.Net 的 vlc 库)

c# - 简单实用的 C# 代码生成(VS 2008 或 2010)

visual-studio - 在 Visual Studio 2013 混合应用程序中更新 Cordova 版本

visual-studio - 未从引用的项目复制 NuGet 包