为什么可以';t我在Win10 ARM系统上运行一个基本的.NET Core应用程序

本文关键字:一个 应用程序 Core NET 运行 系统 ARM Win10 我在 为什么 | 更新日期: 2023-09-27 17:59:16

目前我正在使用Windows 10 IoT Core和新的.NET Core库测试一些家庭自动化。我已经安装了一个香草Rasberry PI 2与Windows 10 IoT核心的最新稳定版本(10.0.10586)。我还安装了当前最新的(RC2-20221).NET包使用dnvmdnvm list显示:

Active Version           Runtime Architecture OperatingSystem Alias
------ -------           ------- ------------ --------------- -----
   1.0.0-rc1-final   clr     x86          win
   1.0.0-rc1-final   coreclr arm          win
   1.0.0-rc1-final   coreclr x64          win
   1.0.0-rc1-final   coreclr x86          win
   1.0.0-rc1-update2 clr     x86          win             default, dnx-clr-win-x86.1.0.0-rc1-update2
   1.0.0-rc2-20221   clr     x64          win
   1.0.0-rc2-20221   clr     x86          win
   1.0.0-rc2-20221   coreclr arm          win
*  1.0.0-rc2-20221   coreclr x64          win
   1.0.0-rc2-20221   coreclr x86          win

然后我创建了一个新的控制台应用程序(.NETCore),它只不过是打印一个字符串:

public class Program
{
    public static void Main(string[] args)
    {
        System.Console.WriteLine($"Hello Raspberry {Math.PI}!");
    }
}

我还更新了project.json文件,从中删除了"Microsoft.NETCore.App"依赖项的"type": "platform"-属性。为此,我明确添加了两个运行时:

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true
  },
  "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.0.0"
    }
  },
  "frameworks": {
    "netcoreapp1.0": {
      "imports": "dnxcore50"
    }
  },
  "runtimes": {
    "win10-x64": {},
    "win10-arm": {}
  }
}

第一个运行时(win10-x64)用于在我的开发机器上测试应用程序,后一个用于部署。我能够使用以下命令成功构建我的应用程序:

dotnet publish --output "X:'Dev'IoT'Samples'Console'output" --runtime win10-arm

在命令行中使用运行时参数win10-x64构建项目的工作如预期:我得到了一个功能齐全的可执行程序,它将所需的字符串打印到我的控制台。在将win10-arm构建部署到我的Rasberry PI之后,尝试从powershell执行应用程序给了我迄今为止遇到的最奇怪的错误:

程序"IoT.Samples.Console.exe"无法运行:操作已成功完成。+类别信息:资源不可用:(:)[],ApplicationFailedException+FullyQualifiedErrorId:NativeCommandFailed

所以程序无法运行,因为。。。好成功

我按照这里的说明使用Powershell连接到RaspPI。此外,正如预期的那样,从我的x64计算机运行ARM构建不起作用。很明显,应用程序是为ARM正确编译的。

那么,为什么powershell会以错误响应呢?这个错误告诉我什么?

提前感谢!

为什么可以';t我在Win10 ARM系统上运行一个基本的.NET Core应用程序

我用复盆子Pi3在Windows 10 IoT Core RTM 10.0.14393.576上工作。

问题是,您必须使用CoreRun.exe工具启动.NET核心应用程序,该工具在CoreCLR中可用。

首先,您必须构建CoreCLR并将其部署到您的Windows 10物联网核心。

  1. 克隆位于的dotnet/coreclr存储库的主分支https://github.com/dotnet/coreclr.
  2. 通过在根存储库目录中键入以下命令,构建CoreCLR的源代码:build.cmd release arm。这将为具有Release配置的ARM构建源代码。在我的机器上,构建大约需要半个小时
  3. 构建完成后,二进制文件可在bin'Product'Windows_NT.arm.Release目录中使用。将整个目录复制到您的Windows 10 IoT Core(例如C:'netcore'coreclr

现在,您必须将.NET Core应用程序部署到Windows 10 IoT Core设备:

  1. project.json文件中指定win10-arm运行时
  2. 删除"Microsoft.NETCore.App"依赖项的"type": "platform"属性
  3. dotnet restore
  4. dotnet publish -c Release -r win10-arm(如果需要调试配置,则为-c Debug
  5. 您的应用程序发布包现在可在bin'Release'netcoreapp1.0'win10-arm'publish目录中使用。将此目录复制到您的Windows 10 IoT Core(例如C:'netcore'apps'MyApp

现在你只需要使用CoreRun.exe工具运行你的应用程序。最重要的是您必须指定DLL文件,而不是EXE文件

C:'netcore'coreclr'CoreRun.exe "C:'netcore'apps'MyApp'MyApp.dll"

如果你在GitHub中查找与CoreCLR for ARM相关的问题,你会发现最近的评论如下:

用于ARM的dotnet处于概念验证质量状态。事实上,它已经完全坏了

我认为它还没有准备好。。。

根据https://blogs.msdn.microsoft.com/dotnet/2016/07/15/net-core-roadmap/我们将在2016年第四季度或2017年第一季度获得ARM32/64支持

相关文章: