首页 文章

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

提问于
浏览
11

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

只有一件事让我思考,我没有在任何地方阅读:当我将我的asp.net 5网络应用程序设置为目标.NET Core并进行部署时,此应用程序并不依赖于.NET框架安装在要托管它的机器上?

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

4 回答

  • 2

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

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

  • 1

    其他一些答案涵盖了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中的完整框架作为系统范围安装的一部分才能工作 .

  • 10

    据我所知,部署捆绑可以依赖于.NET Execution Environment (DNX) . 但你可以 --runtime 使用 --runtime 键,所以也包括DNX .

  • 6

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

    是的,您可以并排使用多个版本的CoreCLR .

相关问题