(Raspbian+C#+Mono)'System.Device.Gpio.Drivers.LibGpiodDriver'的类型初始值设定项引发异常 [英] (Raspbian + C# + Mono) Type initializer for 'System.Device.Gpio.Drivers.LibGpiodDriver' threw an exception

查看:44
本文介绍了(Raspbian+C#+Mono)'System.Device.Gpio.Drivers.LibGpiodDriver'的类型初始值设定项引发异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为一个新项目进行初步研究。我买了一部覆盆子PI 3B,我正在试着运行一个小程序来检查我们所有的必需品:

  1. SQL Server连接。
  2. 将配置文件保存在磁盘上。
  3. 在Raspberry GPIO中配置和使用一些DI/DO。

到目前为止,我已经在上面安装了Mono库,并且正在我的Windows计算机中使用Visual Studio 2019来构建一个WinForms应用程序。

Raspberry OS version: Raspbian GNU/Linux 10 (buster)
Mono version        : Mono JIT compiler version 6.12.0.122

这些是我的应用程序的包:(.Net Framework4.8)

<packages>
  <package id="Microsoft.Win32.Registry" version="5.0.0" targetFramework="net48" />
  <package id="System.Buffers" version="4.5.1" targetFramework="net48" />
  <package id="System.Device.Gpio" version="1.5.0" targetFramework="net48" />
  <package id="System.Memory" version="4.5.4" targetFramework="net48" />
  <package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net48" />
  <package id="System.Runtime.CompilerServices.Unsafe" version="4.5.3" targetFramework="net48" />
  <package id="System.Runtime.InteropServices.WindowsRuntime" version="4.3.0" targetFramework="net48" />
  <package id="System.Runtime.WindowsRuntime" version="4.6.0" targetFramework="net48" />
  <package id="System.Security.AccessControl" version="5.0.0" targetFramework="net48" />
  <package id="System.Security.Principal.Windows" version="5.0.0" targetFramework="net48" />
  <package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net48" />
</packages>

到目前为止,我还没有连接到GPIO,我只是尝试使用以下代码读取管脚值:

private void ReadPinTest()
{
    int pin = 24;
    PinValue pinValue = PinValue.Low;

    try
    {
        using (GpioController gpio = new GpioController(PinNumberingScheme.Board))
        {
            if (gpio == null)
            {
                MessageBox.Show("No GPIO controller found.");
                return;
            }

            gpio.OpenPin(pin, PinMode.Input);
            pinValue = gpio.Read(pin);
        }

        MessageBox.Show($"Pin {pin} is {pinValue}");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
        MessageBox.Show(ex.InnerException.Message);
        MessageBox.Show(ex.InnerException.StackTrace);
    }
}

我收到下一个错误:

异常消息:

"System.Device.Gpio.Drivers.LibGpiodDriver"的类型初始值设定项引发异常。

内部异常消息:

libgpiod

内部异常StackTrace:

At(包装器托管到本机)Interop+libgpiod.gpiod_Version_String()
At System.Device.Gpio.Drivers.LibGpiodDriver.IsLibgpiodVersion1_5orHigher()[0x00000]in<;d49ca6cd97194f038905958dbca2c58c>;:0
At System.Device.Gpio.Drivers.LibGpiodDriver..cctor()[0x0000f]in:0

我已尝试重新安装gpiod库:

sudo apt-get install gpiod

gpiod已是最新版本(1.2-3+rpi1)。

我做错了什么?

推荐答案

当面向linux/raspbian时,我推荐使用.NET 5.0。在这个版本中,对Linux的支持有了很大的改进,而Mono的未来还不确定。它还没有正式的图形用户界面支持,但你可以使用Avalonia或尝试Maui-Linux包,它最终将进入.NET 6.0(计划在今年秋天)。

您的特定问题可能通过运行

sudo apt install -y libgpiod-dev
然而,System.Device.Gpio还没有针对Mono进行过深入的测试,因为它主要是针对.NET Core的。.NET框架支持适用于Windows。

这篇关于(Raspbian+C#+Mono)&#39;System.Device.Gpio.Drivers.LibGpiodDriver&#39;的类型初始值设定项引发异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆