调试符号未加载到针对 .NET Framework 的 .NET 标准项目中

Debugging symbols not loading in .NET standard project targeting .NET Framework

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

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

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

我该怎么做才能解决这个问题?

谢谢!

评论里@hans-passant的回答很好解决

我在 csproj 文件中使用此选项重建了我的 .NET-Core 库。以下是根据@hans-passant 的说明修改文件时添加到 csproj 的片段(项目 > 属性 > 构建选项卡 > 高级按钮。将 "Debugging information" 组合框从便携式更改为完整):

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <DebugType>full</DebugType>
    <DebugSymbols>true</DebugSymbols>
  </PropertyGroup>

然后我将构建的 dllpdb 转储到我的 .NET-Framework 应用程序的 bin 目录中,我能够进入我的 .NET-Core代码。

这是一个与您描述的非常相似的成功解决方法。当我的 'Solution' 仅包含 .NET Standard 项目并且我尝试使用外部 4.6.1 Framework 可执行文件进行调试时(让我们从单独的解决方案中调用它 "Foo.exe")我的断点也没有命中。

我的理解是有两种不同的调试器,.NET Core 调试器和完整框架调试器。我的 vs 'Solution' 默认为前者,因为这是其中唯一的项目类型。

最终对我有用的是欺骗 VS2019 使用 Full Framework Debugger。

为此,我在解决方案中添加了占位符 4.6.1 Framework 控制台项目并将其设置为启动项目。在 Debug 选项卡中,我将 Start Action 设置为完全相同,将 Start External Program 中的值指向与之前相同的值 ("Foo.exe")。现在断点起作用了。

为了清楚起见,注意事项:

  • 占位符应用程序什么都不做,实际上从来没有 运行。
  • 它不需要引用您尝试调试的其他 .NET Standard 程序集。
  • "Foo.exe" 是在任何情况下都会附加的调试过程,但只有当启动项目是框架项目时才会命中断点,而不是当启动项目设置为以下之一时同一解决方案中的 .NET Standard 项目。

顺便说一句,如前文所述,将 "Build\Advanced\Debugging information" 设置为 'Full' 对我的情况没有任何影响,但谢谢你,这很有意义,值得一试!