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

标签 winforms .net-core .net-6.0

我们最近将一个大型解决方案从 .NET 4.8 转换为 .NET 6。它由一些 WinForms 可执行项目、类库项目和单元测试项目组成。但我们在让可执行文件在测试机器上运行时遇到了困难。我们已在该计算机上安装了 .NET 6 Desktop 运行时,但可执行文件仍然拒绝运行:

You must install missing frameworks for .NET

我们发现,除了桌面运行时之外,我们还安装了 ASP.NET Core 运行时后,该错误将不再出现。这令人惊讶,因为据我所知,我们的解决方案中没有使用 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 Core 运行时的测试计算机上运行可执行文件。但为什么该文件中甚至提到了它?

这是怎么回事?难道我们的项目确实以某种方式需要 ASP.NET,也许是因为我们正在使用某些 NuGet 包?如果是这样,我们如何找出这种依赖从何而来?理想情况下,我们的应用程序应该仅依赖于 .NET 6 桌面运行时。

最佳答案

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

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

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

删除这些解决了问题。

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

关于由于某种原因,WinForms 项目似乎依赖于 ASP.NET 运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70974917/

相关文章:

c# - Telerik Winforms 主题标题栏不显示

msbuild - 使用 .NET Core csproj VS 2017 工具最小化引用

azure - 使用 Adzue 应用程序注册的 Blazor 应用程序在部署后出现无限循环,但可以在本地运行

c# - 可描述为字符串的 HttpRequest

azure - 关于在 Azure 应用服务上托管的 D :\local\Temp in .Net 6 Web API 上可用空间不足的异常(即使有大量空间)

c# - 当 DbContext 在单独的项目中时,visual studio 2022 .NET 6 脚手架不起作用

c# - 如何缩小字符串并在以后找到原始字符串

c# - 在我的游戏中使用什么代替 Application.DoEvents?

c# - 我能否以编程方式覆盖客户端 app.config WCF 端点地址?

.net-core - Azure Pipeline 中的 .Net Core、Visual Studio 构建和 MSBuild 任务之间的区别?