如何从具有不同 .NET 版本的 .NET 解决方案调试引用的 NuGet 包?

How to debug a referenced NuGet package from a .NET solution with different .NET versions?

提问人:trubby22 提问时间:8/23/2023 最后编辑:trubby22 更新时间:8/24/2023 访问量:74

问:

我有一个针对 .NET framework net7.0 的 .NET 解决方案 X。在 X 中,我引用(导入)一个自行创建的 NuGet 包,该包使用来自另一个解决方案 Y 的 dll,该解决方案面向多个 .NET 框架:net472 和 netstandard2.0。

我的主要问题是,当我调试 X 时,我无法在来自 Y 的程序集上设置断点。

当我在 X 的 Visual Studio 中打开进程窗口(调试 -> Windows ->进程)时,我看到以下版本的 .NET 的调试器:托管(.NET Core、.NET 5+)。当我在调试 Y 时打开同一窗口时,调试器配置为调试托管 (.NET 4.x)。本 Microsoft 指南解释说,这可能是我问题的根本原因。但是,我不知道如何添加/更改 X 中使用的调试器版本,并且还担心如果我将其更改为匹配 Y 的版本,我将无法再在 X 中调试代码。

到目前为止,我尝试过的事情都没有用:

  1. 手动将相关 .pdb 文件复制到 X 的调试文件夹
  2. 在设置中添加了符号文件位置 - 它包含用于创建 NuGet 包的 dll 和 pdb 文件
  3. 在设置中关闭了“仅我的代码”选项
  4. 正如这里建议的那样,在没有调试的情况下启动了 X,并从另一个 VS 实例附加到它 - 作为我的调试器,我选择了:托管(.NET Core、.NET 5+)和后来的托管 (.NET 4.x),但两种设置都不起作用
C# .NET Visual-Studio 调试 NuGet

评论

0赞 zivkan 8/24/2023
附加调试器后(使用 f5 debug 还是附加到进程无关紧要),打开“模块”窗口。在模块窗口中,找到要单步执行并在其中设置断点的 dll,并确保“已加载符号”列显示“是”。如果没有,则调试器尚未找到 dll 的正确符号,您需要先修复此问题,然后才能成功进行调试和断点。如果将 pdb 复制到调试器搜索的路径中,则表示没有复制正确的 pdb。PDB 具有 DLL 的哈希值。
0赞 trubby22 8/24/2023
我的模块列表甚至没有显示我感兴趣的 dll。另外,来自 Y 的某些 dll 可以正确加载(显示在列表中并且它们的符号会加载),而其他 dll 则不会。这两个模块都是类库。它们之间的唯一区别是,正确加载的模块以 net472 为目标,而未加载的模块同时以 net472 和 netstandard2.0 为目标。

答: 暂无答案