【问题标题】:Right way to produce multiple versions of Nuget package生成多个版本的 Nuget 包的正确方法
【发布时间】:2023-01-07 03:09:01
【问题描述】:

我正在开发一个 NuGet 包,我希望它与多个框架版本兼容。

例如,假设我希望有可用的方法来支持 .NET 7 的新功能,如 Int128。当包的使用者是 .NET 7 应用程序时,他们将获得该功能,但如果他们使用的是较低版本,则他们将无法使用该功能。

解决这个问题的正确方法是什么?为不同的版本制作不同的包是正确的方法还是有更优雅的方法来解决这个问题?

此代码适用于 .NET 7,但不适用于 .NET 6。我如何使用 NuGet 包或编译器提示来支持任一框架版本。

public Int128 ToInt128(IFormatProvider? provider) { return (Int128)IntegerValue; }

有多个版本的 NuGet 包可用是传统做法吗?像 MyStuff.Library.6.0 和 MyStuff.Library.7.0。

【问题讨论】:

    标签: .net nuget .net-7.0


    【解决方案1】:

    您发布针对多个框架的单个包版本,并在源代码中使用 #if 等。

    例如,我的NodaTime package, version 3.1.0 的目标是 TFMs net6.0netstandard2.0。它以 net6.0 为目标,因此我可以为 DateOnlyTimeOnly 提供转换。

    所以在project file 中,我有:

    <TargetFrameworks>netstandard2.0;net6.0</TargetFrameworks>
    

    ...然后在source for DateOnlyExtensions我有:

    #if NET6_0_OR_GREATER
    // Code here
    #endif
    

    【讨论】: