【问题标题】:Howto debug .NET 5 WinForms application that references .NET Framework 4.8 class library in Visual Studio 2019如何在 Visual Studio 2019 中调试引用 .NET Framework 4.8 类库的 .NET 5 WinForms 应用程序
【发布时间】:2021-01-25 11:34:42
【问题描述】:

我测试了引用 .NET Framework 4.8 类库的 .NET 5 WinForms 应用程序 - Github link

我想这可能是因为.NET Framework compatibility mode

当我尝试在 Visual Studio 2019 16.8.4 中调试类库时(通过启动我的 .NET 5 应用程序),我收到一个错误:

调试器配置为使用桌面 CLR (.NET Framework) 托管调试器,但目标进程加载了 CoreCLR (.NET Core) 运行时。调试器配置为使用 Desktop CLR (.NETFramework) 托管调试器,但目标进程加载了 CoreCLR (.Net Core) 运行时。要调试此项目,请将其配置为使用“托管 (CoreCLR)”调试器。

我在哪里可以找到一个选项使用“托管 (CoreCLR)”调试器

提前谢谢你。

更新 如果我从 .NET 5 应用程序项目开始调试 - 我可以进入 .NET Framework 4.8 类库。但我想从类库项目中调试。

【问题讨论】:

  • docs.microsoft.com/en-us/dotnet/standard/… --> NET Framework 不支持 .NET Standard 2.1,我认为无法使用
  • 我知道 .NET Framework 4.8 支持 .NET Standart 2.0。但.NET Framework compatibility mode 允许 .NET Standard 和 .NET Core 项目引用 .NET Framework 库。
  • 不过,似乎没有特别的需要从类库开始。如果您确保调试符号是可访问的(可能暂时将类库项目添加到应用程序的解决方案中,可能作为新的解决方案)您可以随意调试库中的代码。
  • @JeroenMostert 是的,正如我在更新中所写的那样,我可以从 .NET 5 应用程序项目中进行调试 - 可以访问调试符号并且我可以进入类库代码。但是由于某些奇怪的原因,类库代码中的断点不起作用。所以对我来说,从类库项目开始会更方便。如果可能的话。
  • 如果断点不起作用,则表明符号兼容性可能不匹配 - 检查您的库是否正在生成可移植 PDB,即使编译为 .NET Framework 也是如此。将调试器作为核心启动但从库项目启动并不能解决这个问题。在最坏的情况下,您需要将 lib 重新构建为 Core。

标签: c# debugging .net-core visual-studio-2019 .net-5


【解决方案1】:

一个有用的功能是将您的网络框架项目从non-sdk 更改为new-sdk csproj 格式。

1)创建一个net core类库项目,然后输入其csproj文件,然后将targetframework改为:

<TargetFramework>net48</TargetFramework>

所以你得到了一个与 CoreCLR 兼容的 net framework4.8 项目。

this document

完成后,请将非sdk net framework4.8文件移动到新文件中。

2)使用附加到进程,它应该有一个执行程序来运行lib项目的代码。

您可以check this issue获取详细步骤,当您打开附加到进程并记住选择Managed(.Net Core,NET5+)时调试器。

这是a similar issue about it

其实,我推荐方案一,方案二可能会有一些小问题。

【讨论】:

    猜你喜欢
    • 2020-08-27
    • 2021-07-26
    • 2021-12-06
    • 1970-01-01
    • 2020-09-08
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    相关资源
    最近更新 更多