从具有可移植类库的NuGet包中定位.NET 4的最佳策略

时间:2013-01-06 10:55:55

标签: nuget portable-class-library

我有一个目前仅为.NET 4实现的库的NuGet包。但我已经移植了库代码以支持各种平台(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,它只是在针对.NET 4时没有这种支持的PCL。

我的第一个问题是,这似乎是一个正确的策略吗?另一种方法是从PCL中取出所有与XElement相关的代码并将其放在非便携式部件中,但这似乎不正确,因为所有库的代码都完全相同。

第二个问题是,从PCL中定位.NET 4.0.3是否有意义:如果我有单独的版本定位.NET 4将安装.NET 4.0.3运行时的用户从获得PCL获得任何收益而不是普通的.NET 4版本?我知道.NET 4.0.3有其他改进,但那些不会影响我的库。

1 个答案:

答案 0 :(得分: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,那么他们将能够更轻松地使用他们自己的可移植库中的库{ {3}}