为什么有些NuGet包同时提供可移植库和特定平台库?

6
据我所知,可移植类库可以在许多平台上使用,这取决于库设计者选择支持的框架子集。
我注意到,通过NuGet提供的许多库也包括特定于平台的实现,我想知道这是为什么。
例如,Microsoft.Net.Http 包有很多变体,包括:
- Net 4.0 版本 - WinRT(Windows Store 应用)Windows 8 版本 - 支持 Net 4.0、WinRT 和其他平台的可移植类库
为什么需要分发单独的 .Net 4.0 或 WinRT 版本的库? 可移植类库不足以满足需求吗?
当我设计自己的自定义可移植类库时,应该遵循这种约定吗?
明确一点,我不是在谈论需要少量特定于平台的代码才能工作的可移植类库。这些通常有一个名字以 .PlatformServices 结尾的附带托管库。但我说的是由 NuGet 包分发的核心库。
1个回答

5

当然,对于你的需求来说,PCL版本可能已经足够了。但是,当你创建自己的PCL类库项目时,你会发现可以在PCL项目中使用的.NET Framework类和方法子集相对较少。这个子集是通过从完整的.NET Framework中减去不能在其他平台上工作的部分而创建的。

最具限制性的平台是Silverlight和Phone7,它们基于CLR的.NETCore版本。而Store和Phone8则基于通过WinRT api提供的服务。针对任何一个平台都会迅速缩小您的库中可用的功能数量。

Microsoft.Net.Http包被优化为在没有受限制的情况下仍然提供一些相关的Http方法和属性。您可以查看软件包子目录中的System.Net.Http.Extensions.xml文件,以提供IntelliSense,显示在一个平台上可能但在另一个平台上不可能的内容。我看到:

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

请注意,这些属性是使用扩展方法进行映射的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接