【发布时间】:2020-05-15 13:25:19
【问题描述】:
我正在开发一个快速的 ASP.Net Core 3.1 应用程序,并尝试将其推送到 Azure 中的免费 Linux 托管 WebApp。 该应用程序在本地构建、运行并部署到 Windows Azure 中的 docker 环境。所有文件都按预期部署。
挑战是这样的:
使用命令启动应用程序时
dotnet <mywebproject>.dll
日志告诉我:
找不到框架“Microsoft.WindowsDesktop.App”,版本“3.1.0”。
首先要检查的是是否缺少运行时
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不想选择它!
从错误中,我假设 dotnet 正在尝试使用它可以看到的第一个框架来启动网站,但是如何在构建过程中摆脱它?我查看了这些文件是如何在构建过程中生成的,并且看不到任何防止框架被放入 runtimeOptions 文件的选项。
由于我使用 Azure DevOps 构建应用程序,我不能简单地手动编辑文件并将其上传到运行它的托管 linux 容器。
所以我需要帮助:
- 如何构建项目并从正在生成的框架列表中排除“Microsoft.WindowsDesktop.App”
- 如何使用特定目标框架名称在 linux 容器中启动应用程序(我只能从我在 dotnet exec 中看到的设置中选择版本,使用 SSL 到容器。
这或多或少让我发疯了!
【问题讨论】:
-
在黑暗中拍摄:stackoverflow.com/a/60158973
-
是的,不是这样。运行时在那里,但由于某种原因,dotnet 选择使用不兼容的运行时
-
你能分享你的csproj的属性吗?更具体地说是
RuntimeIdentifiers属性?
标签: .net-core-3.1 azure-webapps