c# - 为什么某些 NuGet 包同时提供可移植库和特定于平台的库?

标签 c# nuget portable-class-library

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

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

例如,Microsoft.Net.Http软件包有许多变体,包括:

  • 网络4.0版本
  • WinRT(Windows 应用商店应用)Windows 8 版本
  • 支持 Net 4.0、WinRT 等的可移植类库

为什么需要分发单独的 .Net 4.0 或 WinRT 版本的库? 可移植类库还不够吗?

当我设计自己的自定义可移植库时,我应该遵守这个约定吗?

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

最佳答案

当然,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

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

关于c# - 为什么某些 NuGet 包同时提供可移植库和特定于平台的库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22095703/

相关文章:

c# - 使用 LINQ 将 XML 标记集合连接到字符串

c# - Xamarin "GenerateResourceDesigner"任务意外失败,找不到 .dll 文件

c# - 发现 System.Net.Http 之间存在冲突

c# - Visual Studios 2015 中的 "Restore NuGet Packages"未执行任何操作

c# - 带有 Visual Studio 2012 RC 的 MVC 4/Razor 中的可移植类库?

c# - 我需要做什么才能使此代码在可移植类库中工作?

c# - 跨线程使用引用对象

c# - 文本框焦点检查

c# - XPath - 选择两个节点之间的第一组兄弟节点

.net - 错误 NU1605 检测到软件包降级