C# 为什么可以';我在Win10 ARM系统上运行基本的.NET核心应用程序吗?
目前,我正在使用Windows 10 IoT Core和新的.NET Core库测试一些家庭自动化。我已经用最新稳定版本的Windows 10 IoT Core(10.0.10586)安装了香草Rasberry PI 2。我还使用dnvm安装了当前最新的(RC2-20221).NET软件包,C# 为什么可以';我在Win10 ARM系统上运行基本的.NET核心应用程序吗?,c#,.net,arm,windows-10-iot-core,.net-core,C#,.net,Arm,Windows 10 Iot Core,.net Core,目前,我正在使用Windows 10 IoT Core和新的.NET Core库测试一些家庭自动化。我已经用最新稳定版本的Windows 10 IoT Core(10.0.10586)安装了香草Rasberry PI 2。我还使用dnvm安装了当前最新的(RC2-20221).NET软件包,dnvm列表显示: Active Version Runtime Architecture OperatingSystem Alias ------ ------- -
dnvm列表
显示:
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
程序“IoT.Samples.Console.exe”无法运行:操作已成功完成。
+类别信息:ResourceUnavailable:(:)[],ApplicationFailedException
+FullyQualifiedErrorId:NativeCommand失败
所以程序无法运行,因为。。。好。。。成功
我按照说明使用Powershell连接到RaspPI。此外,正如预期的那样,从我的x64机器运行ARM构建也不起作用。显然,应用程序get是为ARM正确编译的
那么为什么powershell会以错误响应呢?这个错误告诉了我什么
提前谢谢 如果您查看与CoreCLR for ARM相关的GitHub问题,您会发现最近的评论如下: ARM的dotnet处于概念验证质量状态。事实上,它已经完全破碎了 我认为它还没有准备好…根据
我们将在2016年第4季度或2017年第1季度获得ARM32/64支持我在Windows 10 IoT Core RTM 10.0.14393.576上使用了Raspberry Pi3 问题是,您必须使用CoreCLR中提供的CoreRun.exe工具启动.NET Core应用程序 首先,您必须构建CoreCLR并将其部署到Windows 10 IoT核心
Build.cmd release arm
。
这将使用发布配置为ARM构建源代码。
在我的机器上,构建大约需要半个小时bin\Product\Windows\u NT.arm.Release
目录中找到。将整个目录复制到Windows 10 IoT Core(例如,复制到C:\netcore\coreclr
)win10 arm
运行时“type”:“platform”
属性dotnet还原
dotnet publish-c Release-r win10 arm
(或-c Debug
如果需要调试配置)bin\Release\netcoreapp1.0\win10 arm\publish
目录中。将此目录复制到Windows 10 IoT Core(例如,复制到C:\netcore\apps\MyApp
)C:\netcore\coreclr\CoreRun.exe "C:\netcore\apps\MyApp\MyApp.dll"
苏珊已经加入了.NET基金会,在这方面工作,所以它很有前途。我在下面的教程中创建.NET核心应用程序在RP2上,它工作。你有没有遵循任何教程?你有应用程序在W10的IOT核心吗?谢谢,这看起来很有希望!我还没有找到时间在我的RaspPI 2上尝试这个,但无论如何我都会接受这个答案,因为它描述了一个有效的解决方法,并且与其他答案相匹配。我猜dnc在我问这个问题的时候还没有准备好。无论如何,再次感谢。:)