如何使用 Visual Studio 调试 NuGet 包
How to debug NuGet packages using Visual Studio
在 Visual Studio 2015 和 .NET Core 开发中,我们可以通过从源(例如 GitHub)检索源代码到本地磁盘来调试 NuGet 包,将源路径添加到下载的global.json
中的源代码并在我们的项目中引用 NuGet 包。这导致对下载源代码中项目的引用在当前解决方案中自动可见,从而可以轻松调试(有关此功能的更多信息,请阅读 in this article)。
有人知道如何使用 Visual Studio 2017 做同样的事情吗?由于 global.json
不见了,我找不到任何解决方案。
我看到这已成为一个热门问题,但是,MS(目前 Visual Studio 中的大部分时间)在实际可以改进其产品的请求中缺席。
周围有一些关于如何使用 Microsoft 参考库的帖子,但这并不适用于所有项目,而且您将调试优化的发布位,这在监视和步进功能方面都有限制。我也觉得这样做甚至会减慢 Visual Studio 的速度。 post.
中描述了这种方法
不过,最近我找到了解决此问题的方法。它并不总是稳定的,但可以做的是将相关项目添加到您的项目中作为项目参考。
但以下是我执行的大部分有效的步骤:
- 从github(或其他来源)
克隆 nuget 包的存储库
- 尽力找到构建 nuget 包的提交(大多数项目引用带有标签或分支,但不要指望这一点,比较 nuget 包和提交上的日期可能更好) .
- 按照项目中关于如何构建它的说明进行操作,有些只是在 Visual Studio 中构建,其他可能需要更多步骤,例如在命令提示符下使用一些构建脚本。
- 在解决方案中添加对项目的引用,有时您还需要添加项目引用的项目,但并非总是如此。还没有在这里找到确切的规则。似乎较新的 Visual Studio 更新不需要这个。
- 在您的解决方案中引用 nuget 包的所有项目中添加对该项目的引用。如果不这样做可能会导致编译器尽力(不够好)解决的冲突。
构建和调试,在输出中 window 检查是否使用了位于项目输出文件夹中的程序集。如果是,只需在引用的项目中打断点,您将拥有完整的调试功能。
要完成这项工作需要付出一些努力,但最终还是失败了。
可以在项目引用上创建条件以确保它们不是内置的,例如但是,发布版本请注意,更改配置需要您在更改后重新加载解决方案!
这是我发现可重复使用的最简单方法:
- 获取源代码并在本地构建一个nuget包。您需要增加包版本。
希望作者提供了一个.nuspec,使构建更容易。
创建本地 nuget 源:
将刚刚创建的.nuget文件放在C:\Nuget中(例如)
在Visual Studio、select工具/选项/Nuget包管理器/包源
按绿色 (+) 图标。将路径添加到您在上面创建的本地 nuget 包 (C:\Nuget) 并将包源移动到列表顶部。
在您的解决方案中,对于每个项目,删除之前对外部 nuget 包的引用并从本地 nuget 源添加新的 nuget 包。
开始调试,您应该可以进入 nuget 包的代码。
我可以在我构建 nuget 包的源代码中设置一个断点,并在我 运行 代码时让它中断。
以上所有步骤都有些烦躁,您可能需要多试几次才能正常使用。
在 Visual Studio 2015 和 .NET Core 开发中,我们可以通过从源(例如 GitHub)检索源代码到本地磁盘来调试 NuGet 包,将源路径添加到下载的global.json
中的源代码并在我们的项目中引用 NuGet 包。这导致对下载源代码中项目的引用在当前解决方案中自动可见,从而可以轻松调试(有关此功能的更多信息,请阅读 in this article)。
有人知道如何使用 Visual Studio 2017 做同样的事情吗?由于 global.json
不见了,我找不到任何解决方案。
我看到这已成为一个热门问题,但是,MS(目前 Visual Studio 中的大部分时间)在实际可以改进其产品的请求中缺席。
周围有一些关于如何使用 Microsoft 参考库的帖子,但这并不适用于所有项目,而且您将调试优化的发布位,这在监视和步进功能方面都有限制。我也觉得这样做甚至会减慢 Visual Studio 的速度。 post.
中描述了这种方法不过,最近我找到了解决此问题的方法。它并不总是稳定的,但可以做的是将相关项目添加到您的项目中作为项目参考。
但以下是我执行的大部分有效的步骤:
- 从github(或其他来源) 克隆 nuget 包的存储库
- 尽力找到构建 nuget 包的提交(大多数项目引用带有标签或分支,但不要指望这一点,比较 nuget 包和提交上的日期可能更好) .
- 按照项目中关于如何构建它的说明进行操作,有些只是在 Visual Studio 中构建,其他可能需要更多步骤,例如在命令提示符下使用一些构建脚本。
- 在解决方案中添加对项目的引用,有时您还需要添加项目引用的项目,但并非总是如此。还没有在这里找到确切的规则。似乎较新的 Visual Studio 更新不需要这个。
- 在您的解决方案中引用 nuget 包的所有项目中添加对该项目的引用。如果不这样做可能会导致编译器尽力(不够好)解决的冲突。
构建和调试,在输出中 window 检查是否使用了位于项目输出文件夹中的程序集。如果是,只需在引用的项目中打断点,您将拥有完整的调试功能。
要完成这项工作需要付出一些努力,但最终还是失败了。
可以在项目引用上创建条件以确保它们不是内置的,例如但是,发布版本请注意,更改配置需要您在更改后重新加载解决方案!
这是我发现可重复使用的最简单方法:
- 获取源代码并在本地构建一个nuget包。您需要增加包版本。 希望作者提供了一个.nuspec,使构建更容易。
创建本地 nuget 源:
将刚刚创建的.nuget文件放在C:\Nuget中(例如)
在Visual Studio、select工具/选项/Nuget包管理器/包源
按绿色 (+) 图标。将路径添加到您在上面创建的本地 nuget 包 (C:\Nuget) 并将包源移动到列表顶部。
在您的解决方案中,对于每个项目,删除之前对外部 nuget 包的引用并从本地 nuget 源添加新的 nuget 包。
开始调试,您应该可以进入 nuget 包的代码。
我可以在我构建 nuget 包的源代码中设置一个断点,并在我 运行 代码时让它中断。
以上所有步骤都有些烦躁,您可能需要多试几次才能正常使用。