由于某种原因,WinForms 项目似乎依赖于 ASP.NET 运行时

WinForms project seems to depend on ASP.NET runtime for some reason

我们最近将一个大型解决方案从 .NET 4.8 转换为 .NET 6。它由几个 WinForms 可执行项目、class 库项目和单元测试项目组成。但是我们在测试机器上获取可执行文件 运行 时遇到了问题。我们已经在那台机器上安装了 .NET 6 Desktop 运行time,但可执行文件仍然拒绝 运行:

我们发现,当我们同时安装了ASP.NET Core Runtime 后,除了桌面运行time,错误就不会再出现了。这是令人惊讶的,因为据我所知我们没有在我们的解决方案中使用 ASP.NET。 ProjectName.runtimeconfig.json 文件似乎包含以下内容:

{
  "runtimeOptions": {
    "tfm": "net6.0",
    "frameworks": [
      {
        "name": "Microsoft.NETCore.App",
        "version": "6.0.0"
      },
      {
        "name": "Microsoft.WindowsDesktop.App",
        "version": "6.0.0"
      },
      {
        "name": "Microsoft.AspNetCore.App",
        "version": "6.0.0"
      }
    ]
  }
}

删除提到 Microsoft.AspNetCore.App 的部分可以在没有 ASP.NET 核心运行时的情况下 运行 测试机器上的可执行文件。但为什么在该文件中甚至提到了它?

这是怎么回事?会不会是我们的项目在某种程度上确实需要 ASP.NET,也许是因为我们正在使用某些 NuGet 包?如果是这样,我们如何才能找出这种依赖性来自哪里?理想情况下,我们的应用程序应该只依赖于 .NET 6 桌面运行时。

我的一个同事发现了这个问题。

多个项目文件中存在以下内容:

<ItemGroup>
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>

删除那些解决了问题。

根据 git 日志,该段文本似乎是由转换工具(升级助手)出于某种原因生成的。