我已经在Raspberry PI 3上安装了Ubuntu Core 16.04,并设法使用说明here并使用.NET Core版本1.2.0-beta-001291在其上运行.NET Core控制台应用程序-00与ARM芯片兼容。
当我使用基本的ASP.NET Core应用程序执行相同操作时,出现以下错误:
未处理的异常:System.IO.FileLoadException:无法加载文件 或程序集'System.Component.Primitives,Version = 4.2.0.0, Cultire = Neutral,PublicKeyToken = b03f5f7f11d50a3a'。位于 程序集的清单定义与程序集引用不匹配。 (来自HRESULT的异常:0x80131040)at Microsoft.Extensions.FileProviders.PhysicalFileError.CreateFileWatcher(字符串 根) 在 Microsoft.AspNetCore.Hosting.Internal.HostingEnvironmentExtensions.Initialize>(IHostingEnvironment hostingEnvironment,String appplicationName,String contentRootPath, WebHostOptions选项) 在 Microsoft.AspNetCore.Hosting.WebHostBuilder.BuildHostingServices() 在 Microsoft.AspNetCore.Hosting.WebHostBuilder.Build() 在 /home/freek/aspnetcore/program.cs中的Program.Main(String [] args):行 12已中止
以下是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上出错。
答案 0 :(得分:2)
微软已经为他们所有的核心项目匹配了他们的版本号。大多数软件开发人员都在效仿。因此.net核心版本1.1.0与该版本兼容的大多数软件包也是版本1.1.0
您还需要将项目依赖项更新为其beta版本。如果您查看您的project.json并浏览所有依赖项,请在nuget.org上查找并获取最新的beta版本(1.2.0-beta-something)并将project.json版本号更新为您在上找到的版本号nuget.org它可能有用。毕竟它是测试版。
我的建议是在Raspberry Pi上安装.net核心1.1.0然后它应该可以正常工作。但是,如果你不能这样做,上述应该有效。
答案 1 :(得分:0)
使用正确的Runtime Identifier (RID)发布解决方案很重要。
对于Raspberry Pi,您应该使用linux-arm
或linux-arm64
。
尽管dotnet
与大多数流行的平台兼容,但仍需要在应运行该应用程序的计算机上本地构建应用程序,或者使用应运行的计算机正确的RID。
您不能只使用与台式计算机上相同的文件(.dll等)。默认情况下,dotnet publish
使用运行它的计算机的体系结构,这在所有其他情况下都比应用程序需要在不同体系结构(或OS)上运行的情况更好。您的Pi和台式计算机使用不同的体系结构。