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

Posted

技术标签:

【中文标题】.NET Core 不依赖于任何安装?【英文标题】:.NET Core doesn't depend on any installation? 【发布时间】:2015-09-09 18:18:21 【问题描述】:

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

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

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

【问题讨论】:

许多 BCL 已被分离到 NuGet 包中,您必须在应用程序中添加依赖项,然后从提要中恢复这些包。我对所有细节并不十分熟悉,但我会说不,.NET Core 不需要您机器上完整 .NET 框架中的任何内容。 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

其他一些答案涵盖了 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 只是一个存根,需要将完整框架实际安装到 GAC 作为系统范围安装的一部分才能工作。

【讨论】:

【参考方案3】:

据我了解,部署的捆绑包可能依赖于.NET Execution Environment (DNX)。但是你可以 publish your bundle in a specific way 和 --runtime 键,所以 DNX 也包括在内。

【讨论】:

【参考方案4】:

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

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

【讨论】:

以上是关于.NET Core 不依赖于任何安装?的主要内容,如果未能解决你的问题,请参考以下文章

Angular - CodeAnywhere - 你似乎不依赖于“@angular/core”。这是一个错误

WiX 安装程序是不是依赖于 .NET Framework?

在 Windows 11 上找不到任何已安装的 .NET Core SDK(Visual Studio 代码)

如何在 Visual Studio 安装项目的启动条件下检查 .Net Core 版本

如何创建不依赖于 ASP.NET Core 声明的自定义 Authorize 属性?

依赖反转原则DIP 与 使用了Repository的asp.net core 项目结构