Rasberry PI上的Ubuntu上的ASP.NET核心应用程序

时间:2017-01-28 19:13:39

标签: c# ubuntu asp.net-core raspberry-pi .net-core

我已经在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上出错。

2 个答案:

答案 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-armlinux-arm64

尽管dotnet与大多数流行的平台兼容,但仍需要在应运行该应用程序的计算机上本地构建应用程序,或者使用应运行的计算机正确的RID。

您不能只使用与台式计算机上相同的文件(.dll等)。默认情况下,dotnet publish使用运行它的计算机的体系结构,这在所有其他情况下都比应用程序需要在不同体系结构(或OS)上运行的情况更好。您的Pi和台式计算机使用不同的体系结构。