关于 Microsoft 文档 这里 中 IIS 中的 Apppool,我们可以为 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不是托管代码时,为什么还需要下载Runtime?关于 Microsoft 文档 这里 中 IIS 中的 Apppool,我们可以为 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不是托管代码时,为什么还需要下载Runtime?在IIS上运行的Asp.net core是一个反向代理。这意味着:
Asp.net core在单独的进程中运行。该进程运行单独的Web服务器(通常是Kestrel),绑定到本地回环接口上的一些动态端口,例如,它可能监听“localhost:3434”。
IIS知道该过程(它侦听的端口,如何启动它),当IIS接收到请求时 - 它将该请求代理到在单独进程中运行的asp.net core本地Web服务器。
这意味着无需在IIS托管池中运行CLR,因为实际的Asp.net core并未在IIS应用程序池进程内运行。
当然,Asp.net core进程本身需要受控运行时,但它可以自己加载此运行时,无需任何来自IIS的协助。
更新:正如评论中所述,ASP.NET 2.1的下一个版本将引入asp.net core在IIS中托管的进程内模型。在这种情况下,Asp.net core代码实际上将在IIS应用程序池内运行。但即使在那种情况下,应该将应用程序池.NET CLR版本保留为“不使用托管代码”,因为asp.net core IIS模块会自行加载.NET Core CLR,无需IIS干预。