为什么可以';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包使用dnvm,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
然后我创建了一个新的控制台应用程序(.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会以错误响应呢?这个错误告诉我什么?
提前感谢!
我用复盆子Pi3在Windows 10 IoT Core RTM 10.0.14393.576上工作。
问题是,您必须使用CoreRun.exe工具启动.NET核心应用程序,该工具在CoreCLR中可用。
首先,您必须构建CoreCLR并将其部署到您的Windows 10物联网核心。
- 克隆位于的dotnet/coreclr存储库的主分支https://github.com/dotnet/coreclr.
- 通过在根存储库目录中键入以下命令,构建CoreCLR的源代码:
build.cmd release arm
。这将为具有Release配置的ARM构建源代码。在我的机器上,构建大约需要半个小时 - 构建完成后,二进制文件可在
bin'Product'Windows_NT.arm.Release
目录中使用。将整个目录复制到您的Windows 10 IoT Core(例如C:'netcore'coreclr
)
现在,您必须将.NET Core应用程序部署到Windows 10 IoT Core设备:
- 在project.json文件中指定
win10-arm
运行时 - 删除"Microsoft.NETCore.App"依赖项的
"type": "platform"
属性 dotnet restore
dotnet publish -c Release -r win10-arm
(如果需要调试配置,则为-c Debug
)- 您的应用程序发布包现在可在
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支持