假设我有一个在 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(在我的托管环境中)上运行吗?
简短的回答是您的应用程序将运行 .NET8.0 运行时。
应用程序将使用它所针对的任何 .NET 运行时。任何依赖项目或包(不是自包含的)都将使用应用程序加载的运行时。
您可以通过执行以下操作自行测试
由于该应用程序是独立的,因此它将包含 .net 运行时的 dll。如果您检查 dll,例如
System.Runtime.dll
或 Microsoft.AspNetCore.dll
,您会发现有关 net8
或 .NETCoreApp,Version=v8.0
的注释。您不会找到有关 net6
的评论
我还没有找到 Microsoft 对此的逐字文档。我能找到的最好的就是两个规则的组合
最接近的句子是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 如果您想针对目标运行时进行构建,请以该运行时为目标。任何使用较低运行时的内容仍将受到支持(如果目标框架支持较低的框架),但将使用最新的运行时。
您可能会像我一样想知道“如果依赖包引用比我的应用程序更高的运行时怎么办?”如果发生这种情况,应用程序将无法构建,因为它不支持依赖项尝试加载的运行时。