在面向 .NET Framework 的 .NET 标准项目中未加载调试符号

我使用的是 Visual Studio 2017。我创建了一个.NET Standard库(让这个库为Lib1)项目,其中包含两个 Target 框架netstandard2.0net46。然后我还有另外两个项目......一个是“纯”的.NET Framework 4.6控制台项目(我们称之为Console46)和一个.NET Core控制台项目(我们称之为ConsoleCore)。他们都引用了Lib1。

当我运行ConsoleCore项目时,我可以调试并放置断点没有任何问题,但是当我运行Console46时,Visual Studio无法加载pdb文件,因此我无法调试库,放置断点等。

我尝试手动加载 PDB 文件,因为它是为 net46 创建的,但它也失败了。

我能做些什么来解决这个问题?


绝地无双
浏览 216回答 2
2回答

宝慕林4294392

对于与您所描述的非常相似的事情,这是一个成功的解决方法。当我的“解决方案”仅包含 .NET Standard 项目并且我尝试使用外部 4.6.1 Framework 可执行文件(让我们从单独的解决方案中称其为“Foo.exe”)进行调试时,我的断点也没有命中。我的理解是有两个不同的调试器,.NET Core Debugger 和 Full Framework Debugger。我的 vs '解决方案' 默认为前者,因为这是其中唯一的项目类型。最终对我有用的是诱使 VS2019 使用完整框架调试器。为此,我在解决方案中添加了一个占位符 4.6.1 框架控制台项目,并将其设置为启动项目。在调试选项卡中,我将启动操作设置为完全相同,将启动外部程序中的值指向与之前相同的值(“Foo.exe”)。现在断点起作用了。为清楚起见,请注意:占位符应用程序不做任何事情,也从未真正运行过。它不需要引用您尝试调试的其他 .NET Standard 程序集。“Foo.exe”是在任何情况下都会附加的调试过程,但只有当启动项目是框架项目时才会触发断点,而不是当启动项目设置为 .NET 标准项目之一时在同一个解决方案中。顺便说一句,将“Build\Advanced\Debugging information”设置为“Full”,如之前的帖子中所述,对我的场景没有任何影响,但谢谢你,这是有道理的,值得一试!
打开App,查看更多内容
随时随地看视频慕课网APP