.NET Framework 4.6.1 应用程序在引用 .NET Standard 1.4 class 库时出错
.NET Framework 4.6.1 application has errors referencing .NET Standard 1.4 class library
我一直在努力思考 .NET Frameworks、.NET Core 和 .NET Standard 之间的差异。根据我一直在阅读的内容,.NET Standard 是最低公分母,使用 .NET Standard 编写的库应该与使用其他框架编写的代码兼容。
但我已经创建了一个解决方案,其中包含一个使用 .NETStandard 1.4 的 class 库和一个使用 .NET Framework 4.6.1 的应用程序,并且该应用程序似乎 不是 能够使用该库。
无论应用程序在何处尝试使用 class 库中的 class,我都会收到如下错误。
Error CS0012 The type 'IEnumerator<>' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Runtime, Version=4.0.20.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
Error CS0012 The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Runtime, Version=4.0.20.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
Error CS1579 foreach statement cannot operate on variables of type 'HtmlMonkey.HtmlNodeCollection' because 'HtmlMonkey.HtmlNodeCollection' does not contain a public definition for 'GetEnumerator'
有人可以帮助我完善对这些库的理解,以便我的应用程序可以使用我的 class 库吗?
我不记得用于创建我的原始项目的确切顺序。如评论中所述,我的机器上同时安装了 Visual Studio 2017 和新的 Visual Studio 2017 预览版。我什至可以使用不同的版本在我的解决方案中创建每个项目。
无论哪种方式,我都使用 Visual Studio 2017 预览版重新创建解决方案,再次使用使用 .NET Standard 的 class 库和使用 .NET Framework 的 WinForms 应用程序。它似乎工作得很好。 (我不需要使用 NuGet 手动安装任何东西。)
所以不是很明确的解决方案。我最初认为这是一个与我所引用的框架相关的更具体的问题。但也许我会留下这个问题,以防有人遇到类似情况并出现相同的错误消息。
这是一个关于 netstandard 1.4 及更低版本与 .NET 4.6.1 - 4.7 项目兼容性的已知问题。它在 .NET Standard GitHub repo as an issue #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 package doesn't install netstandard1.x packages in net461-net47 projects. This is because we expected the support package to always be present on net461 and later, but when that support was implemented we dialed it back to only turn on when a netstandard1.5 or later library was referenced.
As a result installing a netstandard1.0-1.4 library in a net461-47 project and referencing NETStandard.Library 2.0.0 package will have missing dependencies.
One workaround is to use the NETStandard.Library 1.6.1 package instead. This still has the dependencies on the individual library packages to bring in the facades.
An alternative workaround is to set ImplicitlyExpandNETStandardFacades=true in the project file. This will enable all the facades for ns2.0 assemblies.
我一直在努力思考 .NET Frameworks、.NET Core 和 .NET Standard 之间的差异。根据我一直在阅读的内容,.NET Standard 是最低公分母,使用 .NET Standard 编写的库应该与使用其他框架编写的代码兼容。
但我已经创建了一个解决方案,其中包含一个使用 .NETStandard 1.4 的 class 库和一个使用 .NET Framework 4.6.1 的应用程序,并且该应用程序似乎 不是 能够使用该库。
无论应用程序在何处尝试使用 class 库中的 class,我都会收到如下错误。
Error CS0012 The type 'IEnumerator<>' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Runtime, Version=4.0.20.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
Error CS0012 The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Runtime, Version=4.0.20.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
Error CS1579 foreach statement cannot operate on variables of type 'HtmlMonkey.HtmlNodeCollection' because 'HtmlMonkey.HtmlNodeCollection' does not contain a public definition for 'GetEnumerator'
有人可以帮助我完善对这些库的理解,以便我的应用程序可以使用我的 class 库吗?
我不记得用于创建我的原始项目的确切顺序。如评论中所述,我的机器上同时安装了 Visual Studio 2017 和新的 Visual Studio 2017 预览版。我什至可以使用不同的版本在我的解决方案中创建每个项目。
无论哪种方式,我都使用 Visual Studio 2017 预览版重新创建解决方案,再次使用使用 .NET Standard 的 class 库和使用 .NET Framework 的 WinForms 应用程序。它似乎工作得很好。 (我不需要使用 NuGet 手动安装任何东西。)
所以不是很明确的解决方案。我最初认为这是一个与我所引用的框架相关的更具体的问题。但也许我会留下这个问题,以防有人遇到类似情况并出现相同的错误消息。
这是一个关于 netstandard 1.4 及更低版本与 .NET 4.6.1 - 4.7 项目兼容性的已知问题。它在 .NET Standard GitHub repo as an issue #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 package doesn't install netstandard1.x packages in net461-net47 projects. This is because we expected the support package to always be present on net461 and later, but when that support was implemented we dialed it back to only turn on when a netstandard1.5 or later library was referenced.
As a result installing a netstandard1.0-1.4 library in a net461-47 project and referencing NETStandard.Library 2.0.0 package will have missing dependencies.
One workaround is to use the NETStandard.Library 1.6.1 package instead. This still has the dependencies on the individual library packages to bring in the facades.
An alternative workaround is to set ImplicitlyExpandNETStandardFacades=true in the project file. This will enable all the facades for ns2.0 assemblies.