困惑:ASP.NET Core 2不是托管代码,但ASP.Net Core Runtime是什么?

Sim*_*mon 4 c# iis asp.net-mvc .net-core asp.net-core

关于微软文档这里在IIS的程序池,我们可以为我们的ASP.NET的Core 2应用程序设置"不托管代码",因为ASP.NET的Core 2应用程序并不需要一个CLR:

在此输入图像描述

这让我们感到困惑,因为有一个下载页面提供下载'.NET Core Runtime 2.0.6'的链接:https://www.microsoft.com/net/download/all

当ASP.NET Core 2不是托管代码时,为什么运行时可以下载?

Evk*_*Evk 7

IIS上的Asp.net核心作为反向代理运行.这意味着:

  1. Asp.net核心运行在一个单独的过程中.该进程运行单独的独立Web服务器(通常是Kestrel),绑定到本地环回接口上的某个动态端口.例如,它可能会侦听"localhost:3434".

  2. IIS知道该进程(它在哪个端口上侦听,如何启动它),以及当IIS收到请求时 - 它将该请求代理到在单独进程中运行的asp.net核心本地Web服务器.

这意味着不需要在IIS托管池中运行CLR,因为实际的asp.net核心不在IIS应用程序池进程中运行.

当然,asp.net核心进程本身需要托管运行时,但它可以加载此运行时本身,而无需IIS的任何帮助.

更新:如评论中所述,ASP.NET 2.1的下一版本将介绍IIS中托管的asp.net核心的进程内模型.在这种情况下,asp.net核心代码实际上将在IIS应用程序池中运行.但是,即使在这种情况下应用程序池.NET CLR版本应保留为"无托管代码",因为asp.net核心IIS模块将加载.NET Core CLR本身,而无需IIS干预.


nvo*_*igt 5

它在你从下面获取屏幕截图的下一行说得很对:

ASP.NET Core在单独的进程中运行并管理运行时.

ASP.NET Core不依赖于加载桌面CLR.

(强调我的)

所以它需要一个运行时.该页面甚至会告诉您如何在之前的步骤中安装运行时.只是IIS AppPool不加载运行时本身,因此AppPool不需要知道运行时.