我将我的项目从.net framework 4.5.2移植到.net标准。我读过this article for guiding。正如我在该文章中看到的那样,.net框架4.5.2应该实现.net标准1.2或1.3(如表中所示.net框架4.5.1和4.6但不是4.5.2,所以我不确定)。
因此,它应该适合将我的项目定位到.net标准1.3。我想,如果我的项目只使用.net框架库,我可以重新定位而不会出现任何错误。但是,当我运行.NET Portability Analyzer tool。它表明System.Xml.XPath.XPathNodeIterator仅在.net framework 4.5.2中支持,而不在.net标准1.3中。我必须将.net标准2.0作为目标。
这真让我感到困惑。我在这里误解了什么吗?
在链接的页面上有一个描述.NET标准支持的不同表格:https://docs.microsoft.com/en-us/dotnet/standard/net-standard#net-implementation-support
在.NET Standard 2.0之前,类型XPathNodeIterator
不是.NET Standard的一部分。您可以使用https://apisof.net/catalog/System.Xml.XPath.XPathNodeIterator来查看。
该类型可作为NuGet包提供,如果您的库以.NET Standard 1.6为目标,则可以依赖该类型。包名是System.Xml.XPath
。
话虽这么说,如果你想支持.NET Standard和.NET Framework,你可以多目标。这将构建2个dll,一个针对.NET Standard,另一个针对.NET Framework。只要API在两个版本中都可用,这应该可行。
从net framework
几乎无痛地迁移到netcore
或netstandard
目标netstandard2.x
,或其中一个netcore___2.x
目标。
尝试将大型现有的netframework项目迁移到netstandard 1.x
或netcore 1.x
是一种痛苦的经历。由于netcore2存在,现在既麻烦又徒劳。 Netcore 1.x缺少很多您希望在网络框架项目中工作的NetFramework API。因此,您迁移的项目不会构建,您需要做很多工作才能解决它。
但是,如果您将现有代码移动到新的Netstandard / netcore 2项目中,那么大多数Framework 4.x API都会存在,而且只需很少的更改就可以运行更多的东西。显然你必须重新添加NuGet和其他依赖项。
对于那些不“正常工作”的东西,我做了一个关于multi-targeting netframework/netcore的博客,其中包括一些关于在两个目标之间移动的陷阱的部分。