Недавно я получил 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);
}
}
}
}
}
Итак, подведем итог: мое приложение работает, если я выполняю автономное развертывание, но не в том случае, если я выполняю зависимое от платформы развертывание, и я бы хотел сделать зависимое от платформы развертывание.