.NET Framework 4.6.1应用程序有错误引用.NET Standard 1.4类库

时间:2017-10-22 15:01:49

标签: c# .net .net-standard .net-4.6.1 .net-standard-1.4

我一直在试图解决.NET框架,.NET核心和.NET标准之间的差异。从我读过的内容来看,.NET Standard是最低的共同点,使用.NET Standard编写的库应该与使用其他框架编写的代码兼容。

但是我已经创建了一个使用.NETStandard 1.4的类库和一个使用.NET Framework 4.6.1的应用程序的解决方案,并且看起来该应用程序能够使用该库

无论应用程序尝试使用类库中的类,我都会收到如下错误。

  

错误CS0012类型'IEnumerator<>'在未引用的程序集中定义。您必须添加对程序集'System.Runtime,Version = 4.0.20.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'的引用。

     

错误CS0012“对象”类型在未引用的程序集中定义。您必须添加对程序集'System.Runtime,Version = 4.0.20.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'的引用。

     

错误CS1579 foreach语句无法对“HtmlMonkey.HtmlNodeCollection”类型的变量进行操作,因为“HtmlMonkey.HtmlNodeCollection”不包含“GetEnumerator”的公共定义

有人可以帮助我完善对这些库的理解,以便我的应用程序可以使用我的类库吗?

2 个答案:

答案 0 :(得分:3)

这是关于netstandard 1.4及以下版本与.NET 4.6.1 - 4.7项目的兼容性的已知问题。它会在.NET Standard GitHub repo中作为问题#503 Referencing NETStandard.Library 2.0.0 in net461-net47 project and only using ns1.4 (or lower) libs doesn't work

进行跟踪

问题描述和工作方法如下:

  

NETStandard.Library 2.0.0软件包不在net461-net47项目中安装netstandard1.x软件包。这是因为我们希望支持包始终存在于net461及更高版本中,但是当实现该支持时,我们将其拨回,仅在引用netstandard1.5或更高版本的库时打开。

     

因此,在net461-47项目中安装netstandard1.0-1.4库并引用NETStandard.Library 2.0.0软件包将缺少依赖项。

     

一种解决方法是使用NETStandard.Library 1.6.1包。这仍然依赖于各个库包来引入外墙。

     

另一种解决方法是在项目文件中设置ImplicitlyExpandNETStandardFacades = true。这将启用ns2.0程序集的所有外观。

答案 1 :(得分:0)

我不记得用于创建原始项目的确切顺序。正如评论中所提到的,我在我的机器上安装了Visual Studio 2017和新的Visual Studio 2017 Preview。我甚至可以使用不同的版本在我的解决方案中创建每个项目。

无论哪种方式,我使用Visual Studio 2017 Preview重新创建解决方案,再次使用.NET Standard的类库和使用.NET Framework的WinForms应用程序。它似乎工作得很好。 (我不需要用NuGet手动安装任何东西。)

所以解决方案不是很明确。我原先认为这是一个更具体的问题,与我引用的框架有关。但也许我会留下这个问题,以防任何人遇到类似情况并出现相同的错误信息。