使用FDD使LED闪烁时,PlatformNotSupportedException,可使用SCD

时间:2019-07-06 08:49:55

标签: c# .net-core raspberry-pi publish gpio

我最近有一个Raspberry Pi(3B +和4),并且一直在尝试使用System.Device.Gpio软件包来使.Net Core应用程序正常工作,并紧随a post on Scott Hanselman's blog之后。我正在从我的开发机上发布文件,然后将文件scp'到pi。

如果我使用dotnet publish -r linux-arm进行SCD(自包含部署)并将许多文件复制到Pi,我可以运行该应用程序,并且LED会按预期闪烁。

但是,我尝试做一个dotnet publish来创建FDD(框架依赖部署),但是将这些文件复制过来并执行dotnet ./BlinkLed.dll会导致System.PlatformNotSupportedException被抛出new GpioController(PinNumberingScheme.Board)

我的理解是,FDD和SCD之间的唯一区别是,前者需要安装.Net Core运行时,我看不到关于某些仅在documentation中运行于SCD的应用程序的任何提及。我已经在Pi上安装了它,并且可以dotnet ./<SomeDll>用于打印到控制台的简单hello world应用程序,如果我尝试使用System.Device.Gpio软件包,它似乎不起作用。在尝试建立良好的远程调试体验时,如果能够执行FDD会比较理想,因为FDD生成的文件要少得多,这意味着每个发布/调试周期可以复制到Pi的内容更少。

Program.cs看起来像这样:

using System;
using System.Device.Gpio;
using System.Threading;

namespace LedBlink
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello LedBlink!");

            using(var gpioController = new GpioController(PinNumberingScheme.Board)) // <-- This is where the exception is thrown
            {
                var pin = 11;

                gpioController.OpenPin(pin, PinMode.Output);

                try
                {
                    for (var i = 0; i < 3; i++)
                    {
                        gpioController.Write(pin, PinValue.High);
                        Thread.Sleep(500);
                        gpioController.Write(pin, PinValue.Low);
                        Thread.Sleep(500);
                    }
                }
                finally
                {
                    gpioController.ClosePin(pin);
                }
            }
        }
    }
}

总而言之,如果我执行自包含部署,则我的应用程序可以运行,但是如果我进行框架相关的部署,则我的应用程序可以工作,并且我想进行框架相关的部署。

0 个答案:

没有答案