簡體   English   中英

Raspberry PI 上 Ubuntu 上的 ASP.NET Core 應用程序

[英]ASP.NET Core app on Ubuntu on Raspberry PI

我已經在 Raspberry PI 3 上安裝了 Ubuntu Core 16.04,並通過使用此處的說明並使用與 ARM 兼容的 .NET Core 版本 1.2.0-beta-001291-00 設法讓 .NET Core 控制台應用程序在其上運行籌碼。

當我對基本的 ASP.NET Core 應用程序執行相同操作時,出現以下錯誤:

未處理的異常:System.IO.FileLoadException:無法加載文件或程序集“System.Component.Primitives,Version=4.2.0.0,Cultire=Neutral,PublicKeyToken=b03f5f7f11d50a3a”。 定位的程序集的清單定義與程序集引用不匹配。 (來自 HRESULT 的異常:0x80131040)在 Microsoft.Extensions.FileProviders.PhysicalFileError.CreateFileWatcher(String root) 在 Microsoft.AspNetCore.Hosting.Internal.HostingEnvironmentExtensions.Initialize>(IHostingEnvironment hostingEnvironment, String appplicationName, StringOptionsRoot options, at Microsoft.AspNetCore.Hosting.Internal.HostingEnvironmentExtensions.Initialize> AspNetCore.Hosting.WebHostBuilder.BuildHostingServices() at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build() at Program.Main(String[] args) in /home/freek/aspnetcore/program.cs: line 12 Aborted

這是 program.cs 的內容:

using System;
using System.IO;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;

public class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine("Hello World API!");

    var builder = new ConfigurationBuilder()
      .SetBasePath(Directory.GetCurrentDirectory())
      .AddJsonFile("appsettings.json", optional: true)
      .Build();

    var host = new WebHostBuilder()
      .UseKestrel()
      .UseConfiguration(builder)
      .UseContentRoot(Directory.GetCurrentDirectory())
      .UseStartup<Startup>()
      .Build();

    host.Run();       
  }  
}

該代碼在運行 .NET Core 1.1 的 Ubuntu 桌面上運行良好,但在運行 .NET Core 1.2.0-beta-001291-00 的 PI 上出現錯誤。

微軟一直在匹配他們所有核心項目的版本號。 大多數軟件包開發人員都在效仿。 所以 .net core 版本 1.1.0 大多數與該版本兼容的軟件包也是 1.1.0 版本

您還需要將項目依賴項更新為其 Beta 版本。 如果您查看您的 project.json 並查看所有依賴項,請在 nuget.org 上查找它們並獲取它們的最新測試版 (1.2.0-beta-something) 並將 project.json 版本號更新為您在其上找到的版本號nuget.org 它可能會工作。 畢竟是測試版。

我的建議是在 Raspberry Pi 上安裝 .net core 1.1.0,然后它應該可以正常工作。 但是,如果您不能這樣做,則上述方法應該有效。

使用正確的運行時標識符 (RID)發布解決方案很重要。

對於 Raspberry Pi,您應該使用linux-armlinux-arm64

盡管dotnet與大多數流行平台兼容,但應用程序仍然需要在應該運行它的機器上本地構建,或者為應該運行的機器使用正確的 RID。

您不能只使用與台式計算機上使用的文件相同的文件(.dll 等)。 默認情況下, dotnet publish使用它運行的機器的體系結構,這在所有其他情況下都很好,除非應用程序需要在不同的體系結構(或操作系統)上運行。 您的 Pi 和台式計算機使用不同的架構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM