Visual Studio 中的 .NET 6 项目提供将 NuGet 包更新到 7.0.0

Kar*_*ral 16 .net c# visual-studio nuget .net-6.0

我在 VS 2022 中有一个 .NET 6 ASP.NET Core 项目,想知道是否有办法不在我的 NuGet 更新列表中获取 .NET 7 包?或者我应该将 NutGet 软件包更新到 7.0.X?最佳实践是什么?

NuGet 包管理器

Gur*_*ron 6

检查相应包的依赖关系。例如Microsoft.Extensions.DependencyInjection7.0.0指定下一个支持的框架和依赖项:

  • .NET框架4.6.2
    • Microsoft.Bcl.AsyncInterfaces (>= 7.0.0)
    • Microsoft.Extensions.DependencyInjection.Abstractions (>= 7.0.0)
    • System.Threading.Tasks.Extensions (>= 4.5.4)
  • .NET标准2.0
    • Microsoft.Bcl.AsyncInterfaces (>= 7.0.0)
    • Microsoft.Extensions.DependencyInjection.Abstractions (>= 7.0.0)
    • System.Threading.Tasks.Extensions (>= 4.5.4)
  • .NET标准2.1
    • Microsoft.Extensions.DependencyInjection.Abstractions (>= 7.0.0)
  • .net6.0
    • Microsoft.Extensions.DependencyInjection.Abstractions (>= 7.0.0)
  • 网7.0
    • Microsoft.Extensions.DependencyInjection.Abstractions (>= 7.0.0)

但例如Microsoft.AspNetCore.Authentication.JwtBearer7.0.0仅支持 .NET 7(我的猜测是所有或几乎所有 ASP.NET Core 包都会以相同的方式运行):

  • 网7.0
    • Microsoft.IdentityModel.Protocols.OpenIdConnect (>= 6.15.1)

因此,虽然理论上您可以升级一些依赖项,但绝对不能在不更新目标框架版本的情况下升级全部依赖项。在一般情况下,我更喜欢将所有内容更新到下一个主要版本,或者不更新任何内容(对于支持“绑定到运行时”版本控制的包)。


PMF*_*PMF 5

由您决定是否要升级。这些包被命名为V7.0.0,因为它们与 .NET 7.0 一起发布。对于大多数(如果不是全部)这些包,不要求运行时必须是 .NET 7.0。只需将其读取为该软件包的V7.0 即可。您可以更新(甚至使用新功能)这些包,而无需更新应用程序的运行时。

  • 恐怕 AspNetCore 很有可能需要相应的运行时。 (4认同)
  • @GuruStron 确实,你可能就在那里。不幸的是,这通常只是“尝试或错误”,因为没有关于哪些有效、哪些无效的一般规则。手动查看依赖项(请参阅其他答案)也很丑陋。 (2认同)
  • 是的,没有规则。尽管多年来我已经为我制定了一条经验法则 - 至少对于网络项目(正如我在答案中所写) - 对于遵循使用新运行时发布新主要软件包版本的方法的软件包(通常是微软的) - 坚持使用与运行时匹配的主要软件包版本 - 这样您就不需要进行重大更改和其他类型的兼容性 =) (2认同)
  • 我不确定这是否完全准确。net7.0 至少对 asp.net 有明显的依赖性。为什么它们会出现在针对 .net 6 的项目中?如果您实际尝试更新,它预计会失败:错误 NU1202 Package Microsoft.AspNetCore.Authentication.Google 7.0.2 与 net6.0 (.NETCoreApp,Version=v6.0) 不兼容。软件包 Microsoft.AspNetCore.Authentication.Google 7.0.2 支持:net7.0 (.NETCoreApp,Version=v7.0)` (2认同)