C# 使用.NET 4.7.2项目引用.NET标准2.0项目>;未实现System.IO.Ports

C# 使用.NET 4.7.2项目引用.NET标准2.0项目>;未实现System.IO.Ports,c#,.net,.net-standard-2.0,.net-4.7.2,C#,.net,.net Standard 2.0,.net 4.7.2,Project A是一个Windows控制台应用程序,它使用.NET标准2.0(为了兼容性),并具有以下代码行 public List<string> GetListOfSerialPorts() { return System.IO.Ports.SerialPort.GetPortNames().Distinct().ToList(); } public List GetListOfSerialPorts() { return System

Project A是一个Windows控制台应用程序,它使用.NET标准2.0(为了兼容性),并具有以下代码行

    public List<string> GetListOfSerialPorts()
    {
        return System.IO.Ports.SerialPort.GetPortNames().Distinct().ToList();
    }
public List GetListOfSerialPorts()
{
return System.IO.Ports.SerialPort.GetPortNames().Distinct().ToList();
}
本地单元测试成功运行此代码。意味着从本地单元测试调用时,它可以工作

我现在有了一个项目B(在同一个解决方案中),它是一个基于.NET 4.7.2.的Windows GUI。这个项目不需要像以前那样具有很大的兼容性。此项目“使用”(引用)项目A。调用相同的函数,但来自项目B,当调用完全相同的代码行时,我看到一个异常:

“System.IO.Ports当前仅在Windows上受支持。”)

帮助??有什么线索吗

作为旁注,如果我尝试在项目B中实现“SerialPort.GetPortNames()”,Visual Studio会抱怨它无法引用System.IO.Ports程序集,但当我将其添加为对项目的引用时,它会抱怨现在有两个(不明确的)对System.IO.Ports的引用(它显然已经在“System”中)。请注意,这不是我的主要问题。我的主要问题是,当从项目B调用时,项目A中的原始代码行现在失败了


请注意,我们已经安装了Microsoft.Windows.Compatibility 3.1.1。

我通过在Project B上安装Microsoft Windows兼容性依赖项解决了我的问题,它成功了。我的印象是,它只在.NET核心项目上需要。

最简单的解决方案是将winforms项目升级到.NET 4.8。根据您的建议,我的目标是4.8。重新启动的良好措施。同样的例外。需要说明的是,项目B现在是4.8,正在项目A中调用“GetListOfSerialPorts()”,该项目的目标是.NET标准2.0。我发现了这个问题:-您有机会使用标准2.1吗?看起来他们已经在那个版本中解决了。现在大声笑出来。。。我确实看到了那篇文章,但我没有看到它的相关性。根据你的建议,我试着瞄准2.1。我现在得到一个编译错误:“xxxx.csproj的目标是netstandard2.1。它不能被目标为.NetFramework,Versionc4.7.2的项目引用”。