.NET Core没有';t取决于任何安装

本文关键字:取决于 任何 安装 Core 没有 NET | 更新日期: 2023-09-27 17:59:29

我一直在读关于.NET Core的文章,它看起来很酷。

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

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

.NET Core没有';t取决于任何安装

我的意思是,部署的程序集已经包含CLR、BCL和项目依赖项了吗?

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

其他一些答案涵盖了BCL依赖性方面,但区分运行时和BCL(基类库)很重要。在传统的(非dnx)世界中,由于运行时和bcl都是在系统级别一起安装的,所以界线往往是模糊的。

运行时(dnx)依赖项

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

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

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

据我所知,部署的捆绑包可能依赖于.NET执行环境(DNX)。但您可以使用--runtime密钥以特定方式发布您的捆绑包,因此DNX也包含在内。

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

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