如何在基于 arm 的自定义 linux 上运行 ASP.NET Core?

Pat*_*lph 5 arm embedded-linux .net-core asp.net-core

我想构建一个 ASP.NET Core Web API 服务以在带有基于的 linux的arm (cortex-A7) 设备上运行。

问题:最好的路线是什么?

  1. 为 arm7 设备编译 CoreClr、CoreFx 和其他东西(可能是可能的,但我不确定 angstrom linux)。如果可行,发布的字节码应该在该设备上运行。
  2. 使用 dotnet native 和 target arm 交叉编译我的 aspnet 应用程序。我找不到有用的信息,但这是可能的。
  3. 还有什么?喜欢从我的项目中生成 C++ 代码?
  4. 为设备编译不同的 linux 发行版(可能是不行的,因为我们需要在 Linux Cortex-A7 CPU 和 FreeRTOS Cotex-M4 CPU 之间使用 IPC)。

我主要关心的是 angstrom 发行版,dotnet core 不支持开箱即用的发行版。欢迎任何建议!


编辑,开放问题:

  • 在哪里可以为 Cortex-A7 下载正确的预构建 dotnet 二进制文件(我无法让https://github.com/dotnet/core-setup工作)?
  • 我还需要哪些其他先决条件(如果有)?

Mar*_*ich 5

您可以使用linux-arm.NET Core的可移植运行时构建。在您的构建机器上,确保dotnet --version返回2.0、预览或更高版本(在撰写本文时:)2.0.0-preview1-005977

  1. dotnet new mvc
  2. dotnet restore -r linux-arm
  3. dotnet publish -r linux-arm /p:MvcRazorCompileOnPublish=false
  4. 将 的内容复制bin/Debug/netcoreapp2.0/linux-arm/publish到您的目标机器并运行./nameOfTheProject

由于您可能还想在本地进行开发,因此您需要.csproj像这样 ( <PropertyGroup>)编辑项目 ( ) 文件:

<RuntimeIdentifiers>linux-arm</RuntimeIdentifiers>
<MvcRazorCompileOnPublish Condition=" '$(RuntimeIdentifier)' != 'linux-arm' ">true</MvcRazorCompileOnPublish>
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以同时使用dotnet restoredotnet run并且dotnet publish在开发或其他部署期间无需额外参数,并且在准备部署到 arm 时,仅使用:

dotnet publish -c Release -r linux-arm
Run Code Online (Sandbox Code Playgroud)

并使用生成的二进制文件bin/Release/netcoreapp2.0/linux-arm/publish(或传递一个额外的-o ../publish-output参数)


Pat*_*lph 3

首先,忘记埃。您将不会从该发行版或其包管理器获得任何本机依赖项。您也找不到任何有关埃的有用资源。

相反,使用yocto构建您自己的OpenEmbedded Core linux 发行版,并在构建过程中添加本机依赖项。在撰写本文时,这可以通过Tragetaschen 的aspnet 层进行管理。声明单声道是一项要求,但这是不正确的(现在了吗?)。readme.md

一旦 Arm 系统上提供了本机依赖项(libunwind、libicu 等),您可以Linux (armhf) (for glibc based OS)https://github.com/dotnet/core-setup下载最新版本,将其解压到/opt/dotnet/,并通过以下方式创建符号链接ln -s /opt/dotnet/dotnet /usr/bin/。这是OP的第1号解决方案,通用字节码项目(只是dotnet publish)可以正常工作。

如果您不喜欢在目标计算机上安装 dotnet,您可以编译-r linux-arm(Martin Ulrich 的建议),这会生成一个巨大的发布文件夹,其中包括 coreclr 和 corefx。但是,在目标计算机上安装 dotnet 是所有问题中最小的,并且将应用程序与 dotnet coreclr/fx/host 分离更干净(恕我直言)。

关键问题是

  1. 需要哪些依赖项?目前还没有明确的答案。
  2. 如何为您的机器编译它们?

meta-aspnet层似乎解决了这两个问题(在撰写本文时)。您必须深入研究它以获取更多详细信息,或者按原样使用它。