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

从带有可移植类库的NuGet包中瞄准.NET4的最佳策略,nuget,portable-class-library,Nuget,Portable Class Library,我有一个用于库的NuGet包,该库目前仅为.NET4实现。但我已经移植了库代码来支持各种平台(WinRT、SL5、WP8),因此理想情况下我希望将其打包为一个可移植类库(PCL),以简化维护。但是该库正在使用LINQtoXML(XELements等),这需要以.NET4.0.3为目标,并在客户机上安装.NET4.0.3 因此,对于如何瞄准平原.NET4,我有一个两难的选择。如果它不是关于NuGet软件包,并且我可以控制用户群,那么我可以简单地将安装.NET4.0.3运行时作为先决条件。但是,我不

我有一个用于库的NuGet包,该库目前仅为.NET4实现。但我已经移植了库代码来支持各种平台(WinRT、SL5、WP8),因此理想情况下我希望将其打包为一个可移植类库(PCL),以简化维护。但是该库正在使用LINQtoXML(XELements等),这需要以.NET4.0.3为目标,并在客户机上安装.NET4.0.3

因此,对于如何瞄准平原.NET4,我有一个两难的选择。如果它不是关于NuGet软件包,并且我可以控制用户群,那么我可以简单地将安装.NET4.0.3运行时作为先决条件。但是,我不想以任何方式限制用户群,所以看起来我必须有两个版本的库:针对.NET4.5、SL5和WP8的可移植库和针对.NET4的不可移植库。愚蠢的是,这两个库都有完全相同的代码,因为LINQ to XML在.NET4中当然受支持,只是PCL在针对.NET4时没有这样的支持

我的第一个问题是,这似乎是一个正确的策略吗?另一种选择是从PCL中删除所有依赖XElement的代码,并将其放在非便携部件中,但这似乎并不正确,因为所有库的代码都完全相同


第二个问题是,从PCL以.NET 4.0.3为目标是否有意义:如果我有单独的版本以.NET 4为目标,安装了.NET 4.0.3运行时的用户会从获得PCL而不是普通的.NET 4版本中获得任何好处吗?我知道.NET 4.0.3还有其他改进,但这些改进不会影响我的库。

是的,我认为最好是创建两个版本的库,一个针对.NET 4,另一个针对您支持的其他平台的便携式库。使用源文件链接,这样就不必有两个不同的源代码副本,只需两个不同的VisualStudio项目

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


关于.NET4.0.3的问题,它是关于给您的库的用户提供灵活性。使用您的库的人正在使用它创建应用程序。支持.NET4对他们来说可能不像对您那么重要。通过在您的库的便携版本中支持.NET 4.0.3,这意味着如果他们选择在其应用程序中需要.NET 4.0.3,那么他们将能够从自己的便携库中更轻松地使用您的库。

您确定PCL不支持XElement吗?我知道它不在早期版本的PCL上,但我有广泛使用XElement的PCL。不是最初的NET 4.0,它必须升级到4.0.3,请参阅此处的兼容性列表:谢谢Daniel,我希望从您那里得到答案,这非常有帮助。