【问题标题】:How to debug NuGet packages using Visual Studio如何使用 Visual Studio 调试 NuGet 包
【发布时间】:2017-08-03 19:23:10
【问题描述】:

在 Visual Studio 2015 和 .NET Core 开发中,我们可以通过将源代码从源(例如 GitHub)检索到本地磁盘来调试 NuGet 包,在 global.json 中添加下载源代码的源路径并引用我们项目中的 NuGet 包。这会导致对下载源代码中项目的引用在当前解决方案中自动可见,从而可以轻松调试(有关此功能的更多信息,请参阅in this article)。

有人知道如何使用 Visual Studio 2017 做同样的事情吗?由于global.json 消失了,我找不到任何解决方案。

【问题讨论】:

  • 与普通 .NET 程序集 (yay csproj) 相同。右键单击解决方案资源管理器窗口中的解决方案 > 属性 > 通用属性 > 调试源文件。添加存储源代码的路径。
  • 试过这个,但它仍然没有给我调试的可能性,nuget包没有任何pdb文件,所以它不会加载('dotnet.exe'(CoreCLR: clrhost): Loaded 'C:\Users\\.nuget\packages\microsoft.entityframeworkcore\1.1.1\lib\netstandard1.3\Microsoft.EntityFrameworkCore.dll'。跳过加载符号。模块已优化,调试器选项“只是我的代码”已启用。)。 (例如,试试 Microsoft.EntityFrameworkCore 包)。并添加了 src 根文件夹的路径,就像我在 2015 年在 global.json 文件中所做的那样。
  • 这个问题没有明确的答案,这真的很令人沮丧。微软不好。一切都与 project.json 和 global.json 一起工作得很好,直到放弃了这一切...... aagghhhhh
  • 我将此作为反馈报告给了 visualstudio.com (developercommunity.visualstudio.com/content/problem/89455/…)。如果您喜欢它,请支持它并在那里跟踪。
  • 如果有解决方案,更新这篇文章会很棒。

标签: visual-studio debugging .net-core visual-studio-2017


【解决方案1】:

我看到这已经成为一个流行的问题,但是,MS(就像现在在 Visual Studio 中的大部分时间一样)在实际上可以改进其产品的请求中不存在。

那里有一些关于如何使用 Microsoft 的参考库的帖子,但这并不适用于所有项目,而且您将调试优化的发布位,这会限制监视和步进功能。我也觉得这样做甚至会进一步减慢缓慢的 Visual Studio。这个post描述了这种方法。

但是,最近我找到了解决此问题的方法。它并不总是稳定的,但可以将相关项目添加到您的项目中作为项目参考。

但以下是我所做的最有效的步骤:

  1. 从 github(或其他来源)克隆 nuget 包的存储库
  2. 尽力找出 nuget 包是从哪个提交构建的(大多数项目都使用标签或分支引用,但不要指望这一点,比较 nuget 包和提交的日期可能会更好)。
  3. 按照项目中关于如何构建它的说明进行操作,有些只是在 Visual Studio 中构建,有些可能需要更多步骤,例如在命令提示符下使用一些构建脚本。
  4. 在解决方案中添加对项目的引用,有时您还需要添加项目引用的项目,但并非总是如此。还没有找到这里的确切规则。似乎较新的 Visual Studio 更新不需要这个。
  5. 在解决方案中引用 nuget 包的所有项目中添加对项目的引用。不这样做可能会导致编译器尽力解决的冲突(不够好)。

构建和调试,在您的输出窗口中检查是否使用了位于项目输出文件夹中的程序集。如果是这样,只需在引用的项目中打断点,您就会拥有完整的调试功能。

这有点尝试和失败,但它最终会奏效。

可以在项目引用上创建条件以确保它们不是内置的,例如但是,请注意,更改配置需要您在更改后重新加载解决方案!

【讨论】:

  • 我通过 powershell 脚本使用类似的解决方案,该脚本查看目标解决方案中的所有 proj 文件以查找我想成为 proj refs 的 nug refs 搜索新的克隆文件夹中的项目复制它并更新参考。这是一个超级痛苦的解决方案。
【解决方案2】:

这是我发现可重复使用的最简单方法:

  • 获取源代码并在本地构建nuget包。您需要增加包版本。 希望作者提供了一个 .nuspec 以使构建更容易。

创建本地 nuget 源:

  • 将刚刚创建的 .nuget 文件放在 C:\Nuget 中(例如)

  • 在 Visual Studio 中,选择工具/选项/Nuget 包管理器/包源

  • 按绿色 (+) 图标。将路径添加到您在上面创建的本地 nuget 包 (C:\Nuget) 并将包源移动到列表顶部。

  • 在您的解决方案中,对于每个项目,删除之前对外部 nuget 包的引用,并从本地 nuget 源添加新的 nuget 包。

  • 开始调试,您应该能够单步执行 nuget 包的代码。

我可以在我构建 nuget 包的源代码中设置断点,并在我运行代码时让它中断。

上述所有步骤都有些繁琐,您可能需要尝试几次才能使其正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 2015-03-09
    相关资源
    最近更新 更多