PlatformNotSupportedException при мигании светодиода с помощью FDD, работает с использованием SCD - PullRequest
1 голос
/ 06 июля 2019

Недавно я получил Raspberry Pi (3B + и 4) и пытался заставить приложение .Net Core работать с использованием пакета System.Device.Gpio , следуя наряду с сообщение в блоге Скотта Хансельмана . Я публикуюсь с моей машины разработчика и копирую файлы на пи.

Если я выполняю SCD (Self Contained Deployment) с помощью dotnet publish -r linux-arm и копирую множество файлов в Pi, я могу запустить приложение, и светодиодный индикатор мигает, как и ожидалось.

Однако я пытаюсь сделать dotnet publish для создания FDD (Framework Depdendent Deployment), но копирование этих файлов и выполнение dotnet ./BlinkLed.dll приводит к тому, что System.PlatformNotSupportedException будет выброшено new GpioController(PinNumberingScheme.Board).

Насколько я понимаю, единственное различие между FDD и SCD заключается в том, что для первого требуется установленная среда выполнения .Net Core. Я не вижу ничего упомянутого о некоторых приложениях, работающих только в SCD в документации . Я установил это на Pi и могу dotnet ./<SomeDll> для простого приложения hello world, которое печатает на консоль, кажется, что оно просто не работает, если я пытаюсь использовать пакет System.Device.Gpio. Поскольку я пытаюсь настроить приличный опыт удаленной отладки, было бы идеально, если бы я мог создавать 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);
                }
            }
        }
    }
}

Итак, подведем итог: мое приложение работает, если я выполняю автономное развертывание, но не в том случае, если я выполняю зависимое от платформы развертывание, и я бы хотел сделать зависимое от платформы развертывание.

...