You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET6下使用System.Device.Gpio遇NU1100及平台不支持问题求助

解决方案:UP开发板(x86/Intel Atom)上System.Device.Gpio的.NET6适配问题

问题梳理

你遇到两个连锁问题:

  1. 调用GpioController触发System.PlatformNotSupportedException,提示需目标.NET6且最低Windows版本10.0.17763.0
  2. 修改项目目标版本后出现NU1100错误,无法解析Microsoft.Windows.SDK.NET.Ref (=10.0.17763.34),PackageSourceMapping限制了包源获取

分步解决

1. 修正项目文件的Windows目标配置

打开项目的.csproj文件,确保目标框架和Windows版本配置准确,同时明确SDK引用:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <!-- 指定目标框架为net6.0对应Windows 10 1809版本 -->
    <TargetFramework>net6.0-windows10.0.17763.0</TargetFramework>
    <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
    <UseWindowsForms>false</UseWindowsForms>
    <UseWpf>false</UseWpf>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="System.Device.Gpio" Version="2.2.0" />
    <!-- 手动添加匹配版本的Windows SDK引用 -->
    <PackageReference Include="Microsoft.Windows.SDK.NET.Ref" Version="10.0.17763.34" />
  </ItemGroup>
</Project>

2. 修复PackageSourceMapping限制

NU1100错误是因为PackageSourceMapping阻止了从nuget.org获取所需SDK包,可通过两种方式解决:

方式A:配置PackageSourceMapping允许获取目标包

修改项目根目录或全局的NuGet.Config文件,添加包源映射规则:

<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
  </packageSources>
  <packageSourceMapping>
    <packageSource key="nuget.org">
      <!-- 允许从nuget.org获取这两个包 -->
      <package pattern="Microsoft.Windows.SDK.NET.Ref" />
      <package pattern="System.Device.Gpio" />
    </packageSource>
  </packageSourceMapping>
</configuration>

方式B:临时禁用PackageSourceMapping

如果不需要包源映射功能,可在.csproj中添加配置直接禁用:

<PropertyGroup>
  <DisablePackageSourceMapping>true</DisablePackageSourceMapping>
</PropertyGroup>

3. 验证UP开发板的Windows环境

  • 确认开发板上的Windows版本≥10.0.17763(Windows 10 1809),可通过winver命令查看
  • 若版本过低,需先升级系统,否则即使项目配置正确,运行时仍会触发平台不支持异常

4. 启用开发板的GPIO/SPI硬件支持

  • 进入UP开发板BIOS,找到GPIO/SPI相关选项并启用
  • 确保Windows系统已安装对应硬件的最新驱动(可通过UP官方工具更新)

备用方案:直接封装libgpiod

若上述步骤无法解决,可绕过System.Device.Gpio的Windows驱动,直接用P/Invoke调用libgpiod库:

  1. 下载适配x86架构的libgpiod Windows二进制文件
  2. 在C#中声明P/Invoke函数调用libgpiod API,示例:
using System.Runtime.InteropServices;

public class LibGpiodWrapper
{
    [DllImport("libgpiod.dll", CharSet = CharSet.Unicode)]
    public static extern IntPtr gpiod_chip_open(string chipPath);

    [DllImport("libgpiod.dll")]
    public static extern void gpiod_chip_close(IntPtr chip);

    // 根据需求添加更多libgpiod函数声明
}

内容的提问来源于stack exchange,提问作者Paul Clements

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 09:58:24