深入 .NET Core 基础
标签:
深入 .NET Core 基础 - 2:共享框架原文地址:https://natemcmaster.com/blog/2018/08/29/netcore-primitives-2/
共享框架从 .NET Core 1.0 就成为基础部分。ASP.NET Core 从 .NET Core 2.1 开始也作为共享框架发布。你可能没有注意到该进展是否顺利。但是,这里有一些关于该设计的颠簸和讨论。本文将深入到共享框架,并探讨它的一些常见陷阱。
1. 基础.NET Core 应用程序有两种运行模型:基于框架或者自包含。在我的 MacBook 上,最小的自包含 ASP.NET Core 应用程序的尺寸是 83MB 和 350 个文件。另一方面,最小的框架依赖应用的尺寸是 239KB 和 5 个文件。
可以通过下面的命令来生成两种应用程序
dotnet new web dotnet publish --runtime osx-x64 --output bin/self_contained_app/ dotnet publish --output bin/framework_dependent_app/
在应用程序运行的时候,两种模式的功能是等效的。所以为什么存在不同类型的模型?如微软的文档所述:
框架依赖的发布基于共享的系统范围的 .NET Core 版本......
而自包含的发布不依赖与目标系统上的共享组件。所有的组件......都包含在应用程序中。
该文档非常好地解释了每种模式的优点。
2. 共享框架长短短说,.NET Core 共享框架是一个包含程序集 (*.dll 文件) 的,不在应用程序文件夹中的文件夹。这些程序集一起版本化和发布。该文件夹是 "共享的系统范围的 .NET Core 版本" 的一部分,通常在 C:/Program Files/dotnet/shared 文件夹中。
当你执行 dotnet.exe WebApp.dll 的时候,.NET Core 宿主 必须:
发现你的应用所依赖的名称和版本
在公共位置找到这些依赖内容
这些依赖可以在多个位置发现,包括,,但是不限于,这些共享框架。在上一篇文章中,我已经总结了 deps.json 和 runtimeconfig.json 文件是如何配置宿主的行为。请查看它来得到更详细的说明。
.NET Core 宿主读取 *.runtimeconfig.json 文件来得到需要加载哪个共享框架。其内容可能类似于如下:
{ "runtimeOptions": { "framework": { "name": "Microsoft.AspNetCore.App", "version": "2.1.1" } } }
共享框架名称 只是一个名称。根据约定,该名称以 App 结束,但可以是任何名称,比如 "FooBananaShark"。
共享框架版本 表示最小版本。.NET Core 宿主从不运行在最小版本上,而是试图运行在更高的版本上。
2.1 我已经安装的共享框架是哪些?执行 dotnet --list-runtimes 。它将会显示名称、版本和共享框架的位置。对于 .NET Core 3.1,共享框架的列表如下所示。
dotnet --list-runtimes Microsoft.AspNetCore.App 3.1.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App] Microsoft.NETCore.App 3.1.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App] Microsoft.WindowsDesktop.App 3.1.0 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
2.2 比较 Microsoft.NETCore.App,AspNetCore.App 和 AspNetCore.All在 .NET Core 2.2 中,有如下三种共享框架:
框架名称说明Microsoft.NETCore.App 基础运行时. 它支持类似 System.Object, List, string, 内存管理,文件和网络 I/O,线程等等
Microsoft.AspNetCore.App 默认的 Web 运行时. 它导入了 Microsoft.NETCore.App, 并添加了使用 Kestrel Mvc、SingalR、Razor 和部分 EF Core 构建 HTTP 服务的 API
Microsoft.AspNetCore.All 集成了第三方内容。它导入了 Microsoft.AspNetCore.App. 加入了对 EF Core + SQLite 支持, 使用 Redis 的扩展, 从 Azure Key Vault 进行配置, 以及更多内容. (在 .NET Core 3.0 中将被退役 deprecated in 3.0.)
.NET Core 3.0 增加了 Microsoft.WindowsDesktop.App,并删除了 Microsoft.AspNetCore.All。
2.3 与 NuGet package 的关系温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/41124.html
- 上一篇:动态调用WebService接口的几种方式
- 下一篇:函数的防抖