C# 为什么有些NuGet软件包既提供了一个可移植的库,又提供了一个特定于平台的库?

C# 为什么有些NuGet软件包既提供了一个可移植的库,又提供了一个特定于平台的库?,c#,nuget,portable-class-library,C#,Nuget,Portable Class Library,据我所知,基于库的设计者选择支持的框架子集,可移植类库可以在许多平台上使用 我注意到,通过NuGet提供的许多库还包括特定于平台的实现,我想知道这需要什么 例如,该软件包有许多变体,包括: Net 4.0版本 WinRT(Windows应用商店应用程序)Windows 8版本 支持NET4.0、WinRT等的可移植类库 为什么需要分发单独的.Net 4.0或WinRT版本的库? 可移植类库是否足够 当我设计自己的定制便携库时,我应该遵守这个约定吗 明确地说,我不是说需要一小部分特定于平台的代

据我所知,基于库的设计者选择支持的框架子集,可移植类库可以在许多平台上使用

我注意到,通过NuGet提供的许多库还包括特定于平台的实现,我想知道这需要什么

例如,该软件包有许多变体,包括:

  • Net 4.0版本
  • WinRT(Windows应用商店应用程序)Windows 8版本
  • 支持NET4.0、WinRT等的可移植类库
为什么需要分发单独的.Net 4.0或WinRT版本的库? 可移植类库是否足够

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


明确地说,我不是说需要一小部分特定于平台的代码才能工作的可移植类库。它们通常有一个附带的托管库,其名称以.PlatformServices结尾。但我说的是NuGet包分发的核心库。

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

限制最大的平台是Silverlight和Phone7,它们基于.NETCore版本的CLR。以及存储和电话8,基于通过WinRT api提供的服务。以这些为目标会很快减少您在库中可以做的事情的数量

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

  • HttpWebRequest.AllowAutoRedirect
  • AuthenticationManager.PreAuthenticate
  • HttpWebRequest.ProtocolVersion
  • HttpRequestHeaders.TransferncodingChunked
  • HttpClientHandler.UseProxy
请注意,这些属性是使用扩展方法映射的