引用 NuGet 包(面向 .NET 6.0)的 .NET 8.0 应用程序是否会加载 .NET 6.0 运行时并在 .NET 6.0 上运行该包?

问题描述 投票:0回答:1

假设我有一个在 IIS 服务器上运行的 ASP.NET Core Web API。该应用程序

InternetResourceAPI
直接依赖于名为
ResourceFetcher
的 NuGet 包,该包面向 .NET 6.0 运行时,而
InternetResourceAPI
面向 .NET 8.0 运行时。

当我构建

InternetResourceAPI
并将其托管在我的 IIS 服务器上时,如果 .NET 6.0 运行时已安装并存在于托管包中,
ResourceFetcher
中的代码是否会在 .NET 6.0 运行时上运行?

参考文献的参考文献怎么样?

InternetResourceAPI
(.NET 8.0 应用程序)->
ResourceFetcher2
(.NET 8.0 NuGet 包)->
SomeDependency
(.NET 6.0 NuGet 包)

SomeDependency
中的代码被调用时会在.NET 6.0 .dll(在我的托管环境中)上运行吗?

asp.net-core runtime .net-6.0 .net-8.0
1个回答
0
投票

简短的回答是您的应用程序将运行 .NET8.0 运行时。

TLDR

应用程序将使用它所针对的任何 .NET 运行时。任何依赖项目或包(不是自包含的)都将使用应用程序加载的运行时。

证明

您可以通过执行以下操作自行测试

  1. 创建一个针对net8.0的测试项目
  2. 添加一个针对net6.0的依赖项目
  3. 将应用程序作为独立应用程序发布到文件夹中
  4. 检查已发布的 dll。

由于该应用程序是独立的,因此它将包含 .net 运行时的 dll。如果您检查 dll,例如

System.Runtime.dll
Microsoft.AspNetCore.dll
,您会发现有关
net8
.NETCoreApp,Version=v8.0
的注释。您不会找到有关
net6

的评论

文档

我还没有找到 Microsoft 对此的逐字文档。我能找到的最好的就是两个规则的组合

  1. .NET 运行时向后兼容,因此 .NET8 可以运行针对 .NET6 的项目
  2. 应用程序使用其目标框架运行。

最接近的句子是here。 它说

the .NET 8 SDK includes the .NET 8 runtime, which is an implementation of the net8.0 target framework. The .NET 8 SDK supports net7.0, net6.0, and net5.0, but not net9.0 (or higher). You install the .NET 9 SDK to build for net9.0.

IE 如果您想针对目标运行时进行构建,请以该运行时为目标。任何使用较低运行时的内容仍将受到支持(如果目标框架支持较低的框架),但将使用最新的运行时。

您可能会像我一样想知道“如果依赖包引用比我的应用程序更高的运行时怎么办?”如果发生这种情况,应用程序将无法构建,因为它不支持依赖项尝试加载的运行时。

© www.soinside.com 2019 - 2024. All rights reserved.