【问题标题】:Best strategy to target .NET 4 from a NuGet package with a portable class library从具有可移植类库的 NuGet 包中以 .NET 4 为目标的最佳策略
【发布时间】:2013-01-06 10:55:55
【问题描述】:

我有一个库的 NuGet 包,目前仅针对 .NET 4 实现。但我已移植库代码以支持各种平台(WinRT、SL5、WP8),因此理想情况下我想将其打包为可移植类库 (PCL) 以简化维护。但该库使用 LINQ to XML(XELements 等),需要针对 .NET 4.0.3 并在客户端计算机上安装 .NET 4.0.3。

所以我在如何定位纯 .NET 4 方面遇到了两难境地。如果不是关于 NuGet 包并且我可以控制用户群,我可以简单地声明为安装 .NET 4.0.3 运行时的先决条件。但是,我不想以任何方式限制用户群,所以看起来我必须拥有两个版本的库:针对 .NET 4.5、SL5 和 WP8 的可移植版本,以及仅针对 .NET4 的不可移植版本。愚蠢的是,这两个库将具有完全相同的代码,因为 .NET 4 当然支持 LINQ to XML,只是 PCL 在面向 .NET 4 时没有这种支持。

我的第一个问题是,这似乎是一个正确的策略吗?另一种方法是从 PCL 中删除所有与 XElement 相关的代码,并将其放在不可移植的部分,但这似乎不正确,因为所有库的代码都完全相同。

第二个问题是从 PCL 定位 .NET 4.0.3 是否有意义:如果我有针对 .NET 4 的单独版本,安装了 .NET 4.0.3 运行时的用户是否会从获得 PCL 中获益而不是普通的 .NET 4 版本?我知道 .NET 4.0.3 有其他改进,但不会影响我的库。

【问题讨论】:

  • 您确定 PCL 不支持 XElement 吗?我知道它不在早期版本的 PCL 上,但我有广泛使用 XElement 的 PCL。
  • 不适用于初始 NET 4.0,它必须升级到 4.0.3,请参阅此处的兼容性列表:msdn.microsoft.com/en-us/library/gg597391.aspx

标签: nuget portable-class-library


【解决方案1】:

是的,我认为最好的办法是创建两个版本的库,一个针对 .NET 4,另一个针对您支持的其他平台的可移植库。使用源文件链接,这样您就不必拥有两个不同的源代码副本,只需两个不同的 Visual Studio 项目。

不过,您只需要一个 NuGet 包。将 .NET 4 版本放在 lib/net40 中,将可移植版本放在 lib/portable-net403+win8+wp8+sl5(或您决定支持的任何平台组合)中。然后 NuGet 将根据项目的目标安装正确的。便携版需要 NuGet 2.1 或更高版本。

关于 .NET 4.0.3 的问题是关于为您的库的使用者提供灵活性。使用您的库的人正在使用它来创建应用程序。支持 .NET 4 对他们来说可能不像对您那么重要。通过在您的库的可移植版本中支持 .NET 4.0.3,这意味着如果他们选择在他们的应用程序中要求 .NET 4.0.3,那么他们将能够从他们自己的可移植库中使用您的库,并且更容易@ 987654321@.

【讨论】:

  • 谢谢丹尼尔,希望能得到您的答复,对您有很大帮助。
猜你喜欢
  • 2013-10-18
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
  • 2016-09-24
  • 1970-01-01
  • 2020-04-09
相关资源
最近更新 更多