.NET Core 不依赖于任何安装?

.NET Core doesn't depend on any installation?

我一直在阅读有关 .NET Core 的内容,它看起来真的很酷。

只有一件事让我思考但我没有在任何地方读过它:当我将我的 asp.net 5 Web 应用程序设置为以 .NET Core 为目标并部署它时,这个应用程序没有完全依赖于要托管它的机器上安装的 .NET 框架?

我的意思是,部署的程序集已经包含了 CLR、BCL 和项目依赖项?所以我可以在一台机器上使用不同版本的 .NET Core 托管多个 Web 应用程序,对吗?

I mean, the assemblies deployed already contain the CLR, the BCL and the project dependencies?

它们随 project.json 文件中的任何依赖项一起提供。如果您选择部署 CoreCLR,运行时间将随您的应用一起提供,以便不同的应用能够 运行 在它们使用的任何框架版本上并排。重点是所有 BCL 都慢慢打包到单独的 NuGet 包中,随您的应用程序一起提供,逐步消除部署整个 BCL 的需要。

根据我的理解,部署的捆绑包可以依赖于 .NET Execution Environment (DNX). But you can --runtime 密钥,因此 DNX 也包含在内。

如果您选择将应用程序与运行时捆绑(发布),则该应用程序将使用该特定运行时。如果您在没有它的情况下部署应用程序,那么它将使用安装在该机器上的全局运行时(如果有)。

是的,您可以同时拥有多个版本的 CoreCLR。

其他一些答案涵盖了 BCL 依赖性方面,但重要的是要区分运行时和 BCL(基础 class 库)。在遗留(非 dnx)世界中,界限通常很模糊,因为运行时和 bcl 在系统级别安装在一起。

运行时 (dnx) 依赖性

dnx 为应用程序提供启动点。它包括运行时、即时编译器、字节码编译器 (Roslyn)、非托管低级库和少量托管代码。请务必记住,dnx 由环境(windows、linux、mac、freebsd 等)、体系结构(x86、x64、arm 等)和运行时(目前是 coreclr 或 clr)。它也是版本化的,这个版本化与 bcl 版本是分开的。可能需要较新版本的 dnx 来解决错误、提高性能和添加功能。

因此主机 machine 将需要适当的 dnx(由体系结构、环境、运行时以及在发生重大更改时可能的版本定义)。在主机上获取 dnx 的方法不止一种。一种选择是将其包含在应用程序中(使用 dnu publish -runtime)。另一种选择是使用 dnvm 来安装它 'globally'。无论哪种方式,运行时都是必需的。

作为旁注,完整运行时(非核心)的 dnx 只是一个外观。这是一种使 dnx 应用程序工作相同的方法,无论它们是针对完整框架还是核心框架。您可能会注意到完整框架的 dnx 文件夹(即 dnx-clr-win-x64.1.0.0-beta4)只有大约 10MB。如果未安装完整框架,则应用程序将在运行时失败。本质上,完整框架的 dnx 只是一个存根,它需要作为系统范围安装的一部分实际安装到 GAC 中的完整框架才能工作。