2014-02-28 28 views
6

我的理解是,可移植类库可以在许多平台上使用,这取决于库的设计者选择支持的框架的子集。为什么一些NuGet软件包提供便携式库和平台特定软件包?

我注意到许多通过NuGet可用的库还包括一个特定于平台的实现,并想知道需要什么。

例如,Microsoft.Net.Http包附带了许多变化,包括:

  • 网4.0版本
  • 的WinRT(Windows应用商店的应用程序)的Windows 8版本
  • 便携式类库支持.NET 4.0,WinRT中和其他

为什么需要分发独立的.Net 4.0或WinRT版本的库? 便携式类库不够吗?

当我设计我自己的定制便携式库时,我应该遵守这个约定吗?

需要说明的是,我不是在谈论需要平台特定代码的一小部分才能工作的便携式类库。那些通常有一个随附的托管库,其名称以.PlatformServices结尾。但我正在谈论由NuGet包分发的核心库。

回答

5

当然,PCL版本可能足以满足您的需求。但是,当你创建自己的PCL类库项目时,你一定会发现,你实际可以在PCL项目中使用的.NET Framework类和方法的子集是相当小的。该子集是通过采用完整的.NET Framework创建的,并减去无法在其他平台上工作的部分。

最受限制的平台是Silverlight和Phone7,它们基于CLR的.NETCore版本。 Store和Phone8,基于WinRT API提供的服务。针对其中的任何一种都可以快速减少图书馆可以做的事情数量。

对Microsoft.Net.Http软件包进行了优化,如果您不受限于其中一个受限平台的限制,仍然可以使用某些Http相关方法和属性。您可以在packages子目录中查看,提供IntelliSense的System.Net.Http.Extensions.xml文件向您展示了在一个平台上可以实现的功能,而不是另一个平台上的功能。我看到:

  • HttpWebRequest.AllowAutoRedirect
  • AuthenticationManager.PreAuthenticate
  • HttpWebRequest.ProtocolVersion
  • HttpRequestHeaders.TransferEncodingChunked
  • HttpClientHandler.UseProxy

请注意,这些属性与映射扩展方法。

相关问题