.NET Framework 4.6.1应用程序在引用.NET Standard 1.4类库时出现错误

3
我一直在努力理解.NET Frameworks、.NET Core和.NET Standard之间的区别。从我所读的内容来看,.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:类型“Object”在未引用的程序集中定义。必须添加对程序集“System.Runtime,Version=4.0.20.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”的引用。
错误 CS1579:foreach语句无法在类型“HtmlMonkey.HtmlNodeCollection”上操作,因为“HtmlMonkey.HtmlNodeCollection”不包含公共定义的“GetEnumerator”。
有人能帮助我完善对这些库的理解,以便我的应用程序可以使用我的类库吗?

3
你是否将 NETStandard.Library NuGet 包也安装到了托管应用程序中?另一种选择是使用 PackageReference 代替 packages.config(NuGet 安装选项,会影响第一次安装)- 这样引用将具有传递性。 - Martin Ullrich
{btsdaf} - Martin Ullrich
2
请查看@MartinUllrich提供的公告。这几乎肯定是由于不同包恢复样式之间的不匹配造成的。我鼓励您在net461项目中使用新的VS2017 / MSBuild 15 .csproj格式([链接](https://blog.nuget.org/20170316/NuGet-now-fully-integrated-into-MSBuild.html#what-about-other-project-types-that-are-not-net-core))。 - Kirk Larkin
使用包引用而不是packages.config,这样会有帮助吗? - Lex Li
没有可复现的问题,因此请创建一个 [mcve]。无需发布任何代码,只需按照步骤操作(确切地说是哪个模板等)。 - H H
显示剩余5条评论
2个回答

3
这是一个已知的问题,涉及netstandard 1.4及以下版本与.NET 4.6.1 - 4.7项目的兼容性。在.NET Standard GitHub repo中被追踪为问题#503 在net461-net47项目中引用NETStandard.Library 2.0.0并仅使用ns1.4(或更低版本)库无法正常工作
下面是该问题的描述和可行的解决方法:

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 包。这仍然具有引入 Facedes 的各个库包的依赖关系。

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


0

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

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

因此,这并不是一个非常清晰的解决方案。我最初认为这是一个更具体的问题,涉及我引用的框架。但也许我会保留这个问题,以防有人遇到相似的情况,并出现相同的错误消息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接