簡體   English   中英

為什么我不能在Win10 ARM系統上運行基本的.NET Core應用程序?

[英]Why can't I run a basic .NET Core application on a Win10 ARM system?

目前,我正在使用Windows 10 IoT核心版和新的.NET Core庫測試一些家庭自動化。 我已經使用Windows 10 IoT核心版(10.0.10586)的最新穩定版本設置了香草Rasberry PI 2。 我還使用dnvm安裝了當前最新的(RC2-20221).NET軟件包, dnvm 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

然后,我創建了一個新的控制台應用程序(.NET Core),除了打印字符串外,它只做其他事情:

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 -build部署到我的Rasberry PI之后,嘗試從powershell執行應用程序給了我迄今為止所遇到的最奇怪的錯誤:

Program 'IoT.Samples.Console.exe' failed to run: The operation completed successfully.
    + CategoryInfo          : ResourceUnavailable: (:) [], ApplicationFailedException
    + FullyQualifiedErrorId : NativeCommandFailed

因此程序無法運行,因為...好吧...成功了嗎?

我按照此處的說明使用Powershell連接到RaspPI。 而且,正如預期的那樣,無法從我的x64機器上運行ARM版本。 因此,顯然可以正確地為ARM編譯應用程序。

那么,為什么Powershell會以錯誤響應? 這個錯誤告訴我什么?

提前致謝!

我使用Raspberry Pi3在Windows 10 IoT核心版RTM 10.0.14393.576上運行。

問題是您必須使用CoreCLR中提供的CoreRun.exe工具啟動.NET Core應用程序。

首先,您必須構建CoreCLR並將其部署到Windows 10 IoT核心版。

  1. https://github.com/dotnet/coreclr上克隆dotnet / coreclr存儲庫的主分支。
  2. 通過從根存儲庫目錄中鍵入以下命令來構建CoreCLR的源: build.cmd release arm 這將使用Release配置構建ARM的源。 在我的機器上,構建大約需要半小時。
  3. 構建完成后,二進制文件位於bin\\Product\\Windows_NT.arm.Release目錄中。 將整個目錄復制到Windows 10 IoT核心版(例如,復制到C:\\netcore\\coreclr )。

現在,您必須將.NET Core應用程序部署到Windows 10 IoT核心版設備:

  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核心版(例如,復制到C:\\netcore\\apps\\MyApp )。

現在,您只需使用CoreRun.exe工具運行您的應用程序。 最重要的是, 您必須指定DLL文件,而不是EXE文件

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

如果您在GitHub上查找有關ARM的CoreCLR的問題,就會發現類似以下內容的最新評論:

ARM的dotnet處於概念質量狀態的證明。 實際上,它完全被破壞了。 ;-)

我還沒准備好...

根據https://blogs.msdn.microsoft.com/dotnet/2016/07/15/net-core-roadmap/,我們將在2016年第四季度或2017年第一季度獲得ARM32 / 64支持

暫無
暫無

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

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