Asp.Net Core 3.1 App 设置了错误的 runtimeOptions

Asp.Net Core 3.1 App sets the wrong runtimeOptions

我正在开发一个快速的 ASP.Net Core 3.1 应用程序,并试图将其推送到 Azure 中免费的 Linux 托管的 WebApp。 该应用程序在本地构建、运行并部署到 Windows Azure 中的 docker 环境。所有文件都按预期部署。

挑战是这样的:

使用命令启动应用后

dotnet <mywebproject>.dll

日志告诉我:

The framework 'Microsoft.WindowsDesktop.App', version '3.1.0' was not found.

首先要检查的是是否缺少运行时

root@4182491:~/site/wwwroot# dotnet --list-runtimes

Microsoft.AspNetCore.App 3.1.0 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 3.1.0 [/usr/share/dotnet/shared/Microsoft.NETCore.App]

摸索了一下,发现有个文件叫.runtimeconfig.json:

{
  "runtimeOptions": {
    "tfm": "netcoreapp3.1",
    "frameworks": [
      {
        "name": "Microsoft.WindowsDesktop.App",
        "version": "3.1.0"
      },
      {
        "name": "Microsoft.AspNetCore.App",
        "version": "3.1.0"
      }
    ],
    "configProperties": {
      "System.GC.Server": true
    }
  }
}

所以我需要的运行时就在那里,但是dotnet不想select它!

根据错误,我假设 dotnet 正在尝试使用它可以看到的第一个框架来启动网站,但是如何在构建过程中摆脱它?我查看了这些文件是如何在构建过程中生成的,并且看不到 阻止 将框架放入 runtimeOptions 文件的选项。

由于我是使用 Azure DevOps 构建应用程序的,所以我无法简单地手动编辑文件并将其上传到运行它的托管 linux 容器。

所以我需要帮助:

这或多或少让我抓狂!

我要自己回答这个问题,因为我在喝了太多咖啡后找到了解决方案:

原来你在这里看到的选项

{
  "runtimeOptions": {
    "tfm": "netcoreapp3.1",
    "frameworks": [
      {
        "name": "Microsoft.WindowsDesktop.App",
        "version": "3.1.0"
      },
      {
        "name": "Microsoft.AspNetCore.App",
        "version": "3.1.0"
      }
    ],
    "configProperties": {
      "System.GC.Server": true
    }
  }
}

根本不是选项,而是要求。我发现了一个为 WPF 设计的包的依赖项,当然需要 Microsoft.WindowsDesktop.App 运行 时间来安装。由于我是在 windows 计算机上开发的,因此代码在调试中具有所有必要的 运行 次到 运行,但在 linux 上没有。

我暂时关闭此问题,但由于命名导致混淆,我会留下这个问题以防其他人 运行 陷入与我同样的困惑。