ASP.NET Core 2.1在Arch Linux上无法运行。

3

我在Arch Linux上使用pacman安装了最新版本的.NET Core:

sudo pacman -S dotnet-sdk

运行 dotnet --info 命令会显示正确的版本信息:

Host (useful for support):
  Version: 2.1.0
  Commit:  caa7b7e2ba

.NET Core SDKs installed:
  2.1.0 [/opt/dotnet/sdk]
  2.1.300 [/opt/dotnet/sdk]

我可以运行控制台应用程序,但是在运行ASP.NET Core目录中的dotnet run时返回以下错误提示:

无法找到任何兼容的框架版本。指定的框架'Microsoft.AspNetCore.App',版本'2.1.0'未找到。

为什么看起来版本匹配,但它不能运行呢?
更多细节: ls /opt/dotnet/sdk/ 返回:
2.1.300  NuGetFallbackFolder

.csproj 文件的内容:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

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

</Project>
7个回答

2

.NET Core目前不支持Arch,因此不能保证它能正常工作。当前支持以下64位发行版:

  • Red Hat Enterprise Linux 7、6
  • CentOS 7
  • Oracle Linux 7
  • Fedora 27
  • Debian 9、8.7或更高版本
  • Ubuntu 18.04、17.10、16.04、14.04
  • Linux Mint 18、17
  • openSUSE 42.3或更高版本
  • SUSE Enterprise Linux(SLES)12 Service Pack 2或更高版本
  • Alpine Linux 3.7或更高版本

有关更多信息,请参见此页面

您可以在dotnet仓库中查看与Arch相关的这些问题:

https://github.com/dotnet/coreclr/issues/4409

https://github.com/dotnet/corefx/issues/19447

https://github.com/dotnet/core-setup/issues/3845


感谢您的回答,您提到的问题似乎解决了Linux架构上dotnet core的许多其他次要(不太重要!)问题。尽管微软没有官方支持,但AUR包存在并且似乎可以工作(我猜)。 - Saber
很可能可以通过黑客手段让其正常工作,但是你的问题暗示了.NET Core应该能够在Arch Linux上运行,而实际上,它尚未被期望运行,所以我认为我的回答是正确的。我也添加了额外的问题来帮助解决。 - marcusturewicz

2

虽然这个问题比较老,但如果有人正在尝试在Arch上运行.NET 5,这个方法可以给你提供另一种解决方案。

如果您在构建、发布和运行项目时指定平台运行时,dotnet将构建一个自包含的应用程序,其中包含所有必要的平台特定依赖项。

您可以使用--runtime/-r标志来执行此操作。

以下是在Arch上的示例:

dotnet build -r linux-x64

dotnet run -r linux-x64

dotnet publish -r linux-x64

请参考 Microsoft 文档获取可用的运行时标识符: https://learn.microsoft.com/en-us/dotnet/core/rid-catalog
编辑:
相比 Snap 包,使用 AUR 包路径问题出现较少: https://aur.archlinux.org/packages/dotnet-sdk-bin/
编辑 2:
安装 AUR 的 aspnet-runtime-bin 包后,所有关于找不到 Microsoft.AspNetCore.App 的错误都消失了,无需使用 --runtime 标志: https://aur.archlinux.org/packages/aspnet-runtime-bin

1
我没有一个适合你问题的解决方案,但也许有一个变通方法。我正在使用 elementary os,.net core 2.1 运行良好,但我注意到我的元包路径与你的不同:
.NET Core SDK (reflecting any global.json):
 Version:   2.1.300
 Commit:    adab45bf0c

Runtime Environment:
 OS Name:     elementary
 OS Version:  0.4.1
 OS Platform: Linux
 RID:         linux-x64
 Base Path:   /usr/share/dotnet/sdk/2.1.300/

Host (useful for support):
  Version: 2.1.0
  Commit:  caa7b7e2ba

.NET Core SDKs installed:
  2.0.0 [/usr/share/dotnet/sdk]
  2.1.300 [/usr/share/dotnet/sdk]

你可以尝试将元包从安装文件夹/opt/dotnet/shared复制到/usr/share/dotnet/shared
这位用户在使用Fedora时遇到了类似的问题:https://github.com/dotnet/core-setup/issues/4022

我会尝试您的解决方法,并在下周更新我的评论。谢谢 :-) - Saber
我通过创建符号链接来解决了它,但仍然遇到了相同的错误,谢谢。 - Saber

1
@tura08的回答是错误的,因为.NET Core应该像其他Linux系统一样在Arch Linux上工作。
我遇到了同样的问题,所以我只是报告了https://github.com/dotnet/core-setup/issues/4216,似乎dotnet-sdk包缺少aspnetcore-runtime-2.1依赖项。我给维护者写了封电子邮件,希望他能尽快修复包。

0

我曾经遇到过类似的问题,尝试安装全局工具时也是如此。对我来说,创建符号链接解决了这个问题:

ln -s /opt/dotnet/ /usr/share/dotnet

谢谢你的回答,但我已经尝试过了,结果还是出现了相同的错误。 - Saber

0

0
只需安装这些即可:
sudo pacman -S dotnet-sdk aspnet-runtime

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接