Linux 上的 C# - 未找到所需的框架

Vla*_*mir 3 .net c# linux asp.net archlinux

背景

我已经按照ArchWiki 指南在 Arch GNU/Linux 上安装了 .NET 框架。

主要包是:

  • dotnet-runtime运行 .NET 托管应用程序
  • dotnet-sdk使用 .NET 构建应用程序

此外,我添加~/.dotnet/tools了PATH以便我可以使用 shell 中的 dotnet 工具。我已经通过添加做到了

export PATH="$PATH:/home/MyUserName/.dotnet/tools"
Run Code Online (Sandbox Code Playgroud)

到我的~/.zshenv文件。


问题

一切工作正常,我能够构建一些控制台应用程序。然而,当我尝试构建 ASP.NET Core Web App 时,遇到了一些问题。

首先,我通过运行以下命令创建了一个新的 Web 应用程序:

dotnet new webapp -n MyAppsName --framework net6.0
Run Code Online (Sandbox Code Playgroud)

当我尝试构建并运行时,出现以下错误:

Building...
You must install or update .NET to run this application.

App: /home/MyUserName/RestOfThePath/MyAppsName/bin/Debug/net6.0/MyAppsName
Architecture: x64
Framework: 'Microsoft.AspNetCore.App', version '6.0.0' (x64)
.NET location: /usr/share/dotnet

No frameworks were found.

Learn about framework resolution:
https://aka.ms/dotnet/app-launch-failed

To install missing framework, download:
https://aka.ms/dotnet-core-applaunch?framework=Microsoft.AspNetCore.App&framework_version=6.0.0&arch=x64&rid=arch-x64
Run Code Online (Sandbox Code Playgroud)

似乎缺少框架(或适当的版本)。然而,当我跑步时dotnet --info,似乎并没有缺少我需要的任何东西。以下是上一个命令的输出。

.NET SDK (reflecting any global.json):
 Version:   6.0.109
 Commit:    58a93139d8

Runtime Environment:
 OS Name:     arch
 OS Version:
 OS Platform: Linux
 RID:         arch-x64
 Base Path:   /usr/share/dotnet/sdk/6.0.109/

global.json file:
  Not found

Host:
  Version:      6.0.9
  Architecture: x64
  Commit:       163a63591c

.NET SDKs installed:
  6.0.109 [/usr/share/dotnet/sdk]

.NET runtimes installed:
  Microsoft.NETCore.App 6.0.9 [/usr/share/dotnet/shared/Microsoft.NETCore.App]

Download .NET:
  https://aka.ms/dotnet-download

Learn about .NET Runtimes and SDKs:
  https://aka.ms/dotnet/runtimes-sdk-info
Run Code Online (Sandbox Code Playgroud)

我缺少什么?任何帮助,将不胜感激。

PS这是微软的官方文章,旨在帮助解决这个特定问题。它没有提供任何新的见解。

gun*_*171 12

.Net(请注意,从 .Net 5 开始,它仅称为“.Net”,而不是“.Net Core”或“.Net Framework”)分布在三个不同的包中。

你所缺少的是aspnet-runtime。

dotnet-sdk让您编译源代码。dotnet-runtime让您运行基本应用程序。aspnet-runtime附带了许多专门针对 ASP.Net 的额外内容,因此它是单独分发的。

通常(例如在 Windows 上),当您安装 .Net Sdk 时,它还会安装 ASP.Net 运行时。看来Arch上的SDK包不依赖于aspnet-runtime.

安装aspnet-runtime并再次运行后,您将在“已安装的 .NET 运行时”部分下看到“Microsoft.NETCore.App”(提供的内容)和 Microsoft.AspNetCore.App(提供的内容)dotnet --info的条目。dotnet-runtimeaspnet-runtime