我正在使用Visual Studio2017。我创建了一个具有两个目标框架 netstandard2.0的 .NET Standard 库(让该库为 Lib1 )项目。 和 net46 。然后,我还有另外两个项目...一个是“纯” .strong .NET Framework 4.6 控制台项目(简称为 Console46 )和一个 .NET Core < / strong>控制台项目(简称为 ConsoleCore )。他们两个都引用了Lib1。
运行ConsoleCore项目时,可以毫无问题地调试和放置断点,但是运行Console46时,Visual Studio无法加载pdb文件,因此无法调试库,放置断点等。< / p>
我尝试手动加载PDB文件,因为它是为net46创建的,但也失败了。
我该怎么做才能解决此问题?
谢谢!
答案 0 :(得分:3)
对于与您所描述的内容非常相似的内容,这是成功的解决方法。当我的“解决方案”仅包含.NET Standard项目并且尝试使用外部4.6.1 Framework可执行文件(从单独的解决方案中将其称为“ Foo.exe”)进行调试时,我的断点都没有。
我的理解是,有两种截然不同的调试器,.NET Core调试器和完整框架调试器。我的vs“解决方案”默认为前者,因为这是其中的唯一项目类型。
最终对我有用的是诱使VS2019使用Full Framework Debugger。
为此,我在解决方案中添加了一个占位符4.6.1 Framework控制台项目,并将其设置为Startup项目。在“调试”选项卡中,将“启动操作”设置为完全相同,将“启动外部程序”中的值指向与以前相同的值(“ Foo.exe”)。现在,断点起作用了。
请注意:
如前所述,顺便说一句,将“ Build \ Advanced \ Debugging information”设置为“ Full”对我的情况没有影响,但是谢谢您的理解,确实值得一试!
答案 1 :(得分:1)
评论中张贴的@ hans-passant答案是一个很好的解决方案。
我使用csproj文件中的此选项重建了.NET-Core库。以下是根据@ hans-passant的说明(“项目”>“属性”>“构建”选项卡>“高级”按钮。将“调试信息”组合框从“便携式”更改为“完整”)时,当您修改文件时将其添加到csproj的代码段:
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DebugType>full</DebugType>
<DebugSymbols>true</DebugSymbols>
</PropertyGroup>
然后,我将构建的dll
和pdb
转储到.NET-Framework应用程序的bin
目录中,并能够进入.NET-Core代码。