TL;DR:
>
给定:我编写了一个具有相对可移植功能的库(例如,Left.Pad.©. dll
)。我想通过NuGet使其可用。
要求:如果有人想在任何平台的任何版本上使用我的库,在任何操作系统的任何版本上,通过在任何IDE或任何代码编辑器中编写代码安装任何更新,他们应该能够做到这一点。
问:实现此目的的最小 NuGet 目标框架集是什么?
额外问题:如果有任何不应该作为目标的“死”框架,或者在选择目标框架时应该考虑的其他事情,你也可以提出来。
想法(旧版本):
NuGet包支持多个。NET Framework版本和配置文件,例如,一个包可以提供net20、net30、net35、net40、net45、sl3、sl4、sl5等版本。但是,假设包的功能并不总是存在差异,提供大量版本将浪费构建时间和包大小,并导致不必要的复杂性。另一方面,仅为最低支持的Framework版本提供包可能会导致功能缺失,例如。NET 4支持多个CLR版本的进程内并行执行,但以前的版本不支持,因此如果只是一个版本,则此功能将丢失。提供了NET 3.5(我不确定;我从未使用过它,也不知道详细信息)。如果提供了PCL版本,我认为逻辑很简单:只排除PCL涵盖的版本。
您应该以 .net framework 2.0 及更高版本为目标。决策应基于应用程序将在生产中运行的平台。.net 2.0 包含在 Windows 2008 服务器(SP2 及更高版本)中,人们仍然在生产环境中广泛使用它。参考文献 https://en.wikipedia.org/wiki/.NET_Framework
基于给定的asnwers并假设不依赖于特定于平台的技术(如System.Drawing、ASP.NET或WPF;在这种情况下,只需瞄准您可以使用的平台即可
>
netstandard1.0
-netstandard2.0
从.NET标准1.0开始,一直到达到最大功能。
这应包括:
如果无法在相对较小的 .NET 标准 1.0–1.2 的限制内合理地实现库,则可能会排除最后三点。如果您仍然需要它们,请参阅下面的几点。
。NET Standard 1.5增加了对框架和操作系统版本的要求,所以多目标。为了获得最大的兼容性,可能需要. NET Standard版本。
便携网40 *
下一个主要点是过时的PCL。它的.NET Framework 4.5版本不相关,因为它们主要由.NET Standard覆盖。如果你想支持Windows Phone 8和非通用Windows Store 8,你应该通过PCL来完成,除非你受到API的限制,在这种情况下,你必须添加特定于平台的目标。
如果您不需要任何其他平台,并且 .NET Framework 4.0 提供了一些比 .NET 3.5 有用的附加功能,则可以直接定位它,而不是通过 PCL。
这应包括:
net20
-net35
如果您想支持古老的桌面Windows版本(如Windows XP)和未更新的更新的Windows版本(如带有. NET 3.0的Windows Vista),您应该添加对桌面的支持。NET Framework目标直接。请注意,截至2018-01-01,支持的最低版本。NET为3.5 SP1,因此低于该值可能是不必要的,并且可能会限制您可用的API太多而没有真正的好处。
这应包括:
还有其他平台,即Xamarin特定的平台,Tizen,.NET Micro等。只能通过直接定位它们来访问它们。
这应包括:
TL;DR
类似于netstandard1.1
portable-net40-win8
net35
的内容涵盖了所有相关平台。
当旧的.NET版本完全死亡时,应该只保留.NET Standard。好吧,除非微软发明了另一种跨平台统一技术,就像它已经在.NET,.NET PCL,.NET Standard上所做的那样......
TL;DR
尽可能使用最低的网络标准
。
在编写本文时,最简单的方法是创建一个. NET Standard 1.1项目。它支持
所以几乎所有的现代平台。如果您想支持较旧的平台,例如.NET Framework 3.0,在 NuGet 中将其添加为单独的“文件夹”。这样,较新的 .NET Core 应用程序仍然可以使用你的包。
.NET Standard是PCL的替代品。PCL可以面向的最低.NET Framework是4.0,这比.NET Standard 1.1的4.5低不了多少(因此不会使您的软件包更易于访问)。
另请注意,根据Microsoft的说法,只有.NET Framework 3.5 SP1和.NET Framework。
正如@Lex Li在评论中提到的,.NET标准1.1的API表面非常低,这意味着可能缺少一些重要的API。因此,大多数NuGet软件包使用更高的.NET标准版本。建议使用尽可能最低的.NET标准版本。
因此,使用.NET标准1.1,您将支持绝大多数现代框架。遗憾的是,我找不到任何.NET框架分布统计数据。。。
如果您真的想让您的包适用于每个平台,请查看NuGet可能的目标平台。我认为您至少需要net11
和netStandard ard1.0
,也许添加一些Silverlight和。NET MicroFramework支持...
问题内容: 目前我使用带。我尝试搜索,但找不到,任何版本的hibernate支持任何人列出? 问题答案: 根据Hibernate的版本列表,版本4.3或5.0将支持JPA 2.1。
更新2 我想我的问题可能真的是,“我如何编写在任何至少支持OpenGL 2.0的机器上运行的OpenGL代码?请记住,兼容性配置文件不保证可用。 更新 1: Rabbid76 建议使用特定的核心配置文件或使用兼容性配置文件。 兼容性配置文件不保证可用,所以假设我选择使用OpenGL 3.3核心配置文件作为最低要求。难道我还需要写三个不同版本的GLSL着色器吗? 适用于OpenGL 3.3的3.30
我的问题是:每个Exchange版本中有哪些属性可用(或不可用)的列表吗?
我试图找出最新版本的elasticsearch可以与最新的Spring boot版本一起使用(目前是1.5.9)。我找到了matrix,但它似乎已经过时了。我还发现spring数据elasticsearch 3.0.2。释放支持5 elasticsearch。因此,问题是: 我们可以将Spring boot 1.5.9与Spring data elasticsearch 3.0.2一起使用吗。释放
问题内容: 根据[这一线索]从旧的谷歌集团,AppsScript是基于ECMA-262第3版。 编辑器中的自动完成功能会显示3rd Edition数组函数,这似乎可以证明这一点。 但是,以下代码运行得非常好,对此产生了疑问: 请注意针对每个使用ECMA-262第5版阵列功能。 有人会就这种情况给出权威性的答案吗?依靠所有第5版功能或已实施且似乎有效的子集是否安全? 问题答案: GoogleApps
我想将oracle 12.1与Tomcat6和JDK6连接起来。我只能更改ojdbc版本。我尝试了ojdbc 6、7、8,但得到了相同的身份验证问题 原因:java.sql.sqlexception:ORA-28040:没有匹配的身份验证协议