[英]Error in running ASP.Net Web App on ARM processor (Raspberry Pi 3 B) / Ubuntu (Natively without Mono)
[英]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-arm
或linux-arm64
。
盡管dotnet
與大多數流行平台兼容,但應用程序仍然需要在應該運行它的機器上本地構建,或者為應該運行的機器使用正確的 RID。
您不能只使用與台式計算機上使用的文件相同的文件(.dll 等)。 默認情況下, dotnet publish
使用它運行的機器的體系結構,這在所有其他情況下都很好,除非應用程序需要在不同的體系結構(或操作系統)上運行。 您的 Pi 和台式計算機使用不同的架構。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.