从带有可移植类库的NuGet包瞄准.net 4的最佳策略



我有一个库的NuGet包,目前只在。net 4中实现。但是我已经移植了库代码以支持各种平台(WinRT, SL5, WP8),所以理想情况下我想将其打包为可移植类库(PCL)以简化维护。但是库使用的是LINQ to XML (XELements等),这需要以。net 4.0.3为目标,并在客户端机器上安装。net 4.0.3。

所以我有一个关于如何瞄准纯。net 4的两难选择。如果它不是关于NuGet包,并且我有一个用户群的控制,我可以简单地将其作为安装。net 4.0.3运行时的先决条件。然而,我不想以任何方式限制用户群,所以看起来我将不得不有两个版本的库:可移植的目标是。net 4.5, SL5和WP8,不可移植的目标是。net 4。愚蠢的是,这两个库将具有完全相同的代码,因为。net 4当然支持LINQ to XML,只是pcl在针对。net 4时没有这样的支持。

我的第一个问题是,这是不是一个正确的策略?另一种选择是从PCL中删除所有依赖于xelement的代码,并将其放在不可移植的部分,但这似乎是不对的,因为所有库的代码都是完全相同的。

第二个问题是,从PCL中瞄准。net 4.0.3是否有意义:如果我有一个针对。net 4的单独版本,安装了。net 4.0.3运行时的用户会从PCL而不是普通的。net 4版本中获得任何东西吗?我知道。net 4.0.3有其他的改进,但是这些并不影响我的库。

是的,我认为最好是创建两个版本的库,一个针对。net 4,另一个针对你支持的其他平台的可移植库。使用源文件链接,这样你就不必有两个不同的源代码副本,只需要两个不同的Visual Studio项目。

你只需要一个NuGet包。将。net4版本放在lib/net40中,将可移植版本放在lib/portable-net403+win8+wp8+sl5中(或您决定支持的任何平台组合)。然后NuGet将根据项目的目标安装正确的。要在可移植版本中工作,需要NuGet 2.1或更高版本。

关于。net 4.0.3的问题,它是关于给你的库的消费者灵活性。使用您的库的人正在使用它来创建应用程序。支持。net 4对他们来说可能没有对你那么重要。通过在你的库的可移植版本中支持。net 4.0.3,这意味着如果他们选择在他们的应用程序中需要。net 4.0.3,那么他们将能够从他们自己的可移植库中使用你的库,并更容易地跨平台共享他们的应用程序代码。

最新更新