为.Net Framework和Core 2.0创建nuget包

12 浏览
0 Comments

为.Net Framework和Core 2.0创建nuget包

TL;DR:\n

    \n

  • 给定:我编写了一个具有相对可移植功能的库(例如,Left.Pad..dll)。我想通过NuGet使其可用。
  • \n

  • 要求:如果有人想在任何版本的任何平台上的任何版本的任何操作系统上使用我的库,并通过任何IDE或任何代码编辑器编写代码,他们应该能够这样做。
  • \n

  • 问题:为了实现这一点,NuGet 目标框架最小集合是什么?
  • \n

  • 附加问题:如果有任何\"废弃\"的框架不应该被担心,或者在选择目标框架时应考虑的其他因素,也可以提及。
  • \n

\n


\nThoughts (old version):\nNuGet包支持多个.NET Framework版本和配置文件,例如,一个包可以提供net20、net30、net35、net40、net45、sl3、sl4、sl5等版本。然而,假设包的功能没有差异,提供大量的版本将浪费构建时间和包大小,并引起不必要的复杂性。另一方面,仅提供适用于最低支持的Framework版本的包可能导致功能缺失,例如,.NET 4支持在进程中同时执行多个CLR版本,但之前的版本不支持,因此如果仅提供.NET 3.5版本,则会丢失此功能(我不确定;我从未使用过并不了解细节)。如果提供了PCL版本,我认为逻辑很简单:只需排除PCL覆盖的版本。

0
0 Comments

问题的原因是需要为.Net Framework和Core 2.0创建NuGet包,解决方法如下:

首先,需要确定应用程序将在哪个平台上运行。根据这个决定,您应该将目标设置为.Net Framework 2.0及以上版本。在Windows 2008服务器(SP2及更高版本)中已经包含了.Net 2.0,并且人们仍然广泛地在生产环境中使用它。

为了解决这个问题,您可以参考以下链接:https://en.wikipedia.org/wiki/.NET_Framework。您还可以在这个相关的/类似的后续问题中了解如何定位".NET Framework #及以上"的问题。

以下是问题的整理:

要为.Net Framework和Core 2.0创建NuGet包,您应该将目标设置为2.0及以上版本的.Net Framework。这个决定应该基于应用程序在生产环境中运行的平台。.Net 2.0已经包含在Windows 2008服务器(SP2及更高版本)中,并且在生产环境中仍然被广泛使用。您可以在这个链接中了解更多信息:https://en.wikipedia.org/wiki/.NET_Framework。您还可以在这个链接中找到一个相关的问题:http://stackoverflow.com/questions/37906127

0
0 Comments

问题的原因:

该问题的出现是因为需要创建一个适用于.NET Framework和Core 2.0的NuGet包,但是不清楚如何进行适当的目标设置,以便在不同的平台上实现最大的兼容性。

解决方法:

根据给定的答案和假设不依赖于特定于平台的技术(如System.Drawing、ASP.NET或WPF;在这种情况下,只需针对您可以的平台进行目标设置即可):

1. 从.NET Standard 1.0开始,逐步提升到.NET Standard 2.0,以实现最大的功能覆盖范围。这将覆盖以下平台:

- .NET Framework 4.5

- .NET Core 1.0

- Mono 4.6

- Xamarin.iOS 10.0

- Xamarin.Android 7.0

- Windows Universal 10.0

- Windows non-Universal 8.0 (.NET Standard 1.2及以下)

- Windows Phone 8.1 (.NET Standard 1.2及以下)

- Windows Phone Silverlight 8.0 (.NET Standard 1.0及以下)

如果您无法在相对较小的.NET Standard 1.0-1.2的限制范围内合理实现库,最后三个平台可能会被排除在外。如果您仍然需要它们,请参考下面的方法。

.NET Standard 1.5+会增加对框架和操作系统版本的要求,因此可能需要多重目标设置以实现最大的兼容性。

2. 下一个主要点是过时的PCL(Portable Class Library)。它的.NET Framework 4.5+版本与.NET Standard的功能大部分重叠,因此不再相关。如果您想要支持Windows Phone 8和非Universal Windows Store 8,应该通过PCL来实现,除非受到API的限制,否则您将不得不添加特定于平台的目标。

如果您不需要任何其他平台,并且.NET Framework 4.0相比.NET 3.5提供了一些有用的附加功能,您可以直接以.NET Framework 4.0为目标,而不是通过PCL。

这将覆盖以下平台:

- .NET Framework 4.0

- Windows non-Universal 8.0

- Windows Phone 8.0

- Windows Phone Silverlight 8.0

3. 如果您想要支持古老的桌面Windows版本(如Windows XP)和未更新的更近的Windows版本(如具有.NET 3.0+的Windows Vista+),应该直接添加对桌面.NET Framework的支持。请注意,截至2018-01-01,最低支持的.NET版本是3.5 SP1,因此低于此版本可能是不必要的,并且可能会限制可用的API而无法获得实际的好处。

这将覆盖以下平台:

- .NET Framework 2.0-3.5

- Windows XP

4. 其他平台,如Xamarin特定平台、Tizen、.NET Micro等,只能通过直接针对它们进行目标设置来访问。

这将覆盖其他平台。

可以使用类似于"netstandard1.1+portable-net40+win8+net35"的目标设置来覆盖所有相关平台。

未来的解决方法:

当旧的.NET版本完全过时时,只有.NET Standard应该保留下来。除非Microsoft发明了另一种跨平台统一技术,就像它已经用.NET、.NET PCL、.NET Standard等做过的那样。

在创建适用于.NET Framework和Core 2.0的NuGet包时,应根据需要的最低版本选择合适的目标设置。根据给定的答案,通过多重目标设置来覆盖不同的平台,以实现最大的兼容性。

0
0 Comments

创建适用于.NET Framework和Core 2.0的NuGet包的问题是因为.NET Standard 1.1项目是目前最简单的方法,它支持.NET Core 1.0及更高版本,.NET Framework 4.5及更高版本,Mono,Xamarin,Windows Phone等现代平台。然而,如果要支持旧版本的平台,如.NET Framework 3.0,可以将其作为NuGet中的一个独立"文件夹"添加进去,以便较新的.NET Core应用程序仍然可以使用该包。

.NET Standard是对PCL的替代品,PCL支持的最低.NET Framework版本是4.0,而.NET Standard 1.1支持的最低版本是4.5,因此.NET Standard 1.1并不能使您的包更易于访问。此外,PCL似乎不支持.NET Core,而.NET Standard几乎支持所有平台。根据微软的支持情况,目前只支持.NET Framework 3.5 SP1和.NET Framework >= 4.5.2,其他版本的.NET Framework已经到达生命周期终点,不会再得到任何更新。Windows Phone已经过时,Silverlight也没有取得任何进展。

如果您真的希望使您的包在每个平台上都可用,可以查看NuGet支持的可能目标平台。您可能至少需要支持net11和netstandard1.0,并可能添加一些Silverlight和.NET MicroFramework支持。Silverlight虽然在2022年结束生命周期,但几乎没有主流浏览器支持它。您还应该指出.NET Standard 1.1的API表面相当小,大多数著名的.NET开源库在NuGet上的目标版本都是1.3或2.0。

如果从netstandard1.1降低到更低的版本,看起来我会将目标定为net40/portable-net40+win8,甚至更低的net35。因此,在与至少与相关平台的最大兼容性方面,似乎是netstandard1.1+portable-net40+win8+net35。如果我从netstandard1.1切换到netstandard1.3或netstandard2.0,我会失去与哪些功能的兼容性?似乎1.3需要更高版本的主.NET Framework(4.5对比4.6)并且不再支持WP,2.0似乎还需要更新操作系统。这是正确的吗?

如果您真的想使您的包在每个平台上都可用,那么应该考虑使用netstandard1.1+portable-net40+win8+net35的组合。然而,微软推出了许多新功能和修复程序,这些功能和修复程序只适用于.NET Core,因此是否仍然是最佳建议还有待商榷。

0