3

我有一个库的 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 的可移植版本,以及仅针对 .NET4 的不可移植版本。愚蠢的是,这两个库将具有完全相同的代码,因为 .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 有其他改进,但不会影响我的库。

4

1 回答 1

2

是的,我认为最好的办法是创建两个版本的库,一个针对 .NET 4,另一个针对您支持的其他平台的可移植库。使用源文件链接,因此您不必拥有两个不同的源代码副本,只需两个不同的 Visual Studio 项目。

不过,您只需要一个 NuGet 包。将 .NET 4 版本放在 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,那么他们将能够从他们自己的可移植库中使用您的库并更轻松地共享他们跨平台的应用程序代码

于 2013-01-07T16:55:20.730 回答