目前,我正在使用Windows 10 IoT Core和新的.NET Core库测试一些家庭自动化。我使用最新的稳定版Windows 10 IoT Core(10.0.10586)设置了一个带有Rasilla 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
所以程序无法运行,因为......好......成功?
我按照说明here使用Powershell连接到RaspPI。此外,正如预期的那样,从我的x64机器运行ARM构建不起作用。很明显,应用程序得到了正确的ARM编译。
那么为什么powershell会出错呢?这个错误告诉我什么?
提前致谢!
答案 0 :(得分:3)
我使用Raspberry Pi3在Windows 10 IoT核心RTM 10.0.14393.576上工作。
问题是你必须使用 CoreRun.exe 工具启动你的.NET核心应用程序,该工具在CoreCLR中可用。
首先,您必须构建CoreCLR并将其部署到Windows 10 IoT核心。
build.cmd release arm
中键入以下命令来构建CoreCLR的源代码。
这将使用Release配置构建ARM的源代码。
在我的机器上,构建大约需要半个小时。bin\Product\Windows_NT.arm.Release
目录中找到。将整个目录复制到Windows 10 IoT核心(例如,复制到C:\netcore\coreclr
)。现在,您必须将.NET Core应用程序部署到Windows 10 IoT核心版设备:
win10-arm
运行时。"type": "platform"
属性。依赖性。dotnet restore
dotnet publish -c Release -r win10-arm
(如果您需要调试配置,则为-c Debug
)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"
答案 1 :(得分:2)
如果您浏览与CoreCLR for ARM相关的GitHub问题,您会发现最近的评论,例如this one:
ARM的dotnet是概念质量状态的证明。事实上,它完全被打破了。 ; - )
我认为它还没准备好......
答案 2 :(得分:1)
根据https://blogs.msdn.microsoft.com/dotnet/2016/07/15/net-core-roadmap/ 我们将在2016年第四季度或2017年第一季度获得ARM32 / 64支持