我一直在阅读有关.NET Core的内容,看起来真的很酷。
只有一件事让我思考,我无法在任何地方阅读:当我将我的asp.net 5网络应用程序设置为目标.NET Core并进行部署时,此应用程序并不是依赖所有安装在将要托管它的机器上的.NET框架?
我的意思是,部署的程序集已包含CLR,BCL和项目依赖项?因此,我可以在一台具有不同版本.NET Core的单机中托管多个Web应用程序,对吧?
答案 0 :(得分:10)
我的意思是,部署的程序集已包含CLR,BCL和项目依赖项?
它们随附project.json
文件中的任何依赖项。如果您选择部署CoreCLR,则运行时将随您的应用程序一起提供,以便不同的应用程序能够在它们消耗的任何框架版本上并行运行。关键是所有的BCL都被慢慢打包成独立的NuGet软件包,这些软件包随您的应用程序一起提供,逐步消除了部署整个BCL的需要。
答案 1 :(得分:6)
其他一些答案涵盖了BCL依赖方面,但重要的是要区分运行时和BCL(基类库)。在传统(非dnx)世界中,线条经常模糊,因为运行时和bcl都是在系统级别一起安装的。
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只是一个存根,它需要实际安装到GAC中的完整框架作为系统范围安装的一部分才能工作。
答案 2 :(得分:2)
根据我的理解,部署包可以依赖于.NET Execution Environment (DNX)。但您可以使用--runtime
密钥publish your bundle in a specific way,因此也包含DNX。
答案 3 :(得分:1)
如果选择使用运行时捆绑(发布)应用程序,则应用程序将使用该特定运行时。如果在没有它的情况下部署应用程序,那么它将使用该计算机上安装的全局运行时(如果有)。
是的,您可以并排使用多个版本的CoreCLR。