我一直在阅读有关.NET Core的内容,看起来真的很酷 .
只有一件事让我思考,我没有在任何地方阅读:当我将我的asp.net 5网络应用程序设置为目标.NET Core并进行部署时,此应用程序并不依赖于.NET框架安装在要托管它的机器上?
我的意思是,部署的程序集已包含CLR,BCL和项目依赖项?所以我可以在一台机器上托管多个不同版本的.NET Core,对吧?
我的意思是,部署的程序集已包含CLR,BCL和项目依赖项?
它们与 project.json 文件中的任何依赖项一起发布 . 如果您选择部署CoreCLR,则运行时将随您的应用程序一起提供,以便不同的应用程序能够在它们消耗的任何框架版本上并行运行 . 关键是所有的BCL都被慢慢打包成单独的NuGet包,这些包与您的应用程序一起提供,逐步消除了部署整个BCL的需要 .
project.json
其他一些答案涵盖了BCL依赖方面,但重要的是要区分运行时和BCL(基类库) . 在传统(非dnx)世界中,线条经常模糊,因为运行时和bcl在系统级别一起安装 .
dnx提供应用程序的启动点 . 它包括运行时,即时编译器,字节码编译器(Roslyn),非托管低级库和少量托管代码 . 重要的是要记住,dnx由环境(windows,linux,mac,freebsd等),体系结构(x86,x64,arm等)和运行时(当前coreclr或clr)标识 . 它也是版本的,这个版本与bcl版本是分开的 . 可能需要较新版本的dnx来解决错误,提高性能和添加功能 .
因此主机将需要适当的dnx(由体系结构,环境,运行时定义,以及在发生更改时可能的版本) . 在主机上获取dnx的方法不止一种 . 一种选择是将其包含在应用程序中(使用dnu publish -runtime ) . 另一种选择是使用dnvm来安装它'globally' . 无论哪种方式,运行时都是必需的 .
publish -runtime
另请注意,完整运行时(非核心)的dnx只是一个外观 . 这是一种使dnx应用程序工作相同的方法,无论它们是针对完整框架还是核心框架 . 你可能会注意到完整框架的dnx文件夹(即dnx-clr-win-x64.1.0.0-beta4)只有大约10MB . 如果未安装完整框架,则应用程序将在运行时失败 . 本质上,完整框架的dnx只是一个存根,它需要实际安装到GAC中的完整框架作为系统范围安装的一部分才能工作 .
据我所知,部署捆绑可以依赖于.NET Execution Environment (DNX) . 但你可以 --runtime 使用 --runtime 键,所以也包括DNX .
--runtime
如果选择使用运行时捆绑(发布)应用程序,则应用程序将使用该特定运行时 . 如果在没有它的情况下部署应用程序,那么它将使用该计算机上安装的全局运行时(如果有) .
是的,您可以并排使用多个版本的CoreCLR .
4 回答
它们与
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来安装它'globally' . 无论哪种方式,运行时都是必需的 .另请注意,完整运行时(非核心)的dnx只是一个外观 . 这是一种使dnx应用程序工作相同的方法,无论它们是针对完整框架还是核心框架 . 你可能会注意到完整框架的dnx文件夹(即dnx-clr-win-x64.1.0.0-beta4)只有大约10MB . 如果未安装完整框架,则应用程序将在运行时失败 . 本质上,完整框架的dnx只是一个存根,它需要实际安装到GAC中的完整框架作为系统范围安装的一部分才能工作 .
据我所知,部署捆绑可以依赖于.NET Execution Environment (DNX) . 但你可以
--runtime
使用--runtime
键,所以也包括DNX .如果选择使用运行时捆绑(发布)应用程序,则应用程序将使用该特定运行时 . 如果在没有它的情况下部署应用程序,那么它将使用该计算机上安装的全局运行时(如果有) .
是的,您可以并排使用多个版本的CoreCLR .