【问题标题】:Why do some NuGet packages provide both a Portable Library and an Platform Specific One?为什么某些 NuGet 包同时提供可移植库和特定于平台的库?
【发布时间】:2014-04-01 11:41:33
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: c# nuget portable-class-library


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-09-20
      • 2013-10-18
      • 2017-11-03
      • 1970-01-01
      • 2016-09-24
      • 1970-01-01
      • 2016-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多