一、基于.NET Core 的跨平台

本章介绍了ASP 中包含的所有新概念和新特性.NET Core 2.0

为了理解 ASP 中所有可用的选项,下面的一些解释是必须的.NET 的核心。

在本章中,我们将介绍:

  • 安装或更新。net Core
  • 用 ASP 管理 NuGet 包.NET 应用
  • 创建并运行 ASP.NET Core MVC 应用在 Linux
  • 创建并运行 ASP.NET Core MVC 应用在 Linux 与 Docker
  • 创建并运行 ASP.NET Core MVC 应用在 macOS
  • 创建并运行 ASP。 Azure 上的 NET Core MVC 应用

什么是 ASP.NET Core 2.0 ?

这个新版本的 ASP.NET 是微软生态系统中一场相当大的革命。

在 ASP.NET 核心,ASP.NET 不是开源的,而且只能在 Windows 上运行。 开发 ASP.NET 应用,大多数开发人员使用 Visual Studio 作为 IDE。 这并不是强制性的,因为我们可以使用带有 CSharp 或 VB 编译器的记事本(通常都是免费的),但即使有一个快速版,与之相比也更容易。 当时,在 Linux 和 macOS 上运行。net 应用的唯一方法是使用 Mono,它是。net 框架的开源跨平台版本。

ASP.NET Core 2.0 版本要灵活得多。 您可以在任何操作系统(至少是 Windows、Linux 和 macOS)上进行开发,使用各种工具,如 Visual Studio、Visual Studio Code,甚至 Sublime Text。 ASP.NET Core 现在是模块化的,更具可维护性,并提高了性能。 在设计上,它是支持云计算和基于中间件的。

与新版本的 ASP.NET, IIS 不是唯一可能的主机。 你可以托管你的 ASP.NET 应用在其他 web 服务器上,例如在 macOS 和 Linux 上的Kestrel

在所有的变化,一些最重要的是MVC 的融合Web API,和删除WebForms,服务定位器、【显示】系统.NET

MVC 和 Web API 中存在的所有重复库,比如控制器、操作、过滤器、模型绑定和依赖解析器,现在都是相同的统一类。

对 ASP 中最重库的强烈依赖.NET,系统。 Web,现在删除使 ASP.NET Core MVC 更加模块化,中间件兼容,和平台无关。

All the source code for ASP.NET Core MVC is available in its GitHub repository at https://github.com/aspnet/mvc. We can find all the ASP.NET Core repositories at https://github.com/aspnet, and all the .NET Core repositories at https://github.com/microsoft/dotnet.

什么是新的 ASP.NET 和 CLR 吗?

我们现在将使用两个框架,并有两个选项来开发 web 应用:

  • 框架 4.6,它为我们提供了与传统应用和以前的。net 框架最大的兼容性。 框架 4.6 只适用于 Windows。 ASP 最有趣的新特性之一.NET 4.6 是 HTTP2,它给了我们:
    • 异步 ModelBinding
    • 能力总是加密交换在网络上
    • 浏览器缓存的预填充
    • 没有关闭的 TCP 连接中断
  • . net Core 2.0,它是在 Core CLR 之上的模块化和轻量级方法,用于开发跨平台应用。

为了创建一个兼容两个框架的应用,我们可以独立使用它们,也可以同时使用两个框架,遗留应用的旧 dll 将不得不迁移到。net Core 2.0 版本上。

.NET 框架的两个版本也可以同时存在于同一个应用中; 例如。net Framework 4.6 和。net Core 2.0。

Before .NET Core, Mono was used as and open source cross-platform .NET Framework.

All the libraries outside the framework are optional, available in the form of packages.

在。net Core 之前,. net 应用只能在 Windows 下执行,因为只有 Windows 才能实例化 CLR。 如果 IIS 负责实例化,则WebEngine.dll负责实例化 CLR。

现在,我们有了一个新的 SDK,其中包含了许多工具,允许我们执行 ASP。 asp.net 应用在 IIS 之外,并且独立于任何 web 服务器。

安装或更新。net Core

在本教程中,我们将学习如何设置。net Core。 如果你是第一次安装它,这个配方是关键的。

安装。net Core 是一项相对简单的任务。 微软做了一项伟大的工作,使得在任何计算机上安装。net Core 变得很容易。 我们所需要的只是一台干净的电脑和一个网络连接。

怎么做……

第一步是打开 web 浏览器并导航到http://dot.net/core站点。 它将检测主机操作系统,并显示下载和安装步骤。

  • 在 Windows 平台上,我们可以通过点击下载。net Core SDK 按钮并开始安装,轻松下载。net Core SDK 安装程序。 设置完成后,就可以在机器上开发/运行。net Core 应用了。

  • Linux 安装: 在 Linux 平台上,在 Ubuntu、RedHat、Debian、Fedora、CentOS 和 Suse 发行版上安装。net Core 有不同的命令。 我们应该在页面上选择正确的分布,并按照前面的说明执行一些 Terminal 命令。

  • macOS 平台的安装: 在 macOS 平台上,只需下载. net Core SDK 包即可。

  • 安装 Docker: 有另外一个平台可以部署和运行。NET Core 应用:Docker。 Docker 只是一个虚拟化平台。 你可以在机器上运行 Docker,然后把你的。net Core 应用部署到 Docker 中。 一旦您成功地将一个应用部署到 Docker,就很容易运行多个它的实例。

Docker 通常帮助开发人员以最小的管理成本扩展他们的应用。

它是如何工作的…

安装。net Core 2.0 SDK 后,打开终端/命令提示符窗口,执行如下命令:

dotnet --info 

这个命令显示已安装和最新的。net Core SDK 版本(在本书编写时是 2.0.2),Runtime Environment信息(操作系统平台、体系结构、版本等等),以及。net Core SDK 安装路径:

我们可以看到Base Path包含了。net Core SDK 版本。 如果我们将该版本从路径中移除,并在 Finder/Explorer 中打开该路径,我们可以看到所有安装的。net Core SDK 版本:

就像删除一个文件夹来删除机器上的任何。net Core SDK 版本一样简单。

用 ASP 管理 NuGet 包.NET Core 应用

现在在 ASP.NET Core,每个依赖项和每个 DLL 都是一个 NuGet 包,可以用dotnet CLI管理。

怎么做……

使用 dotnet CLI,您将能够:

  • 安装和卸载软件包
  • 构建一个应用
  • 为应用创建程序集
  • 通过下载所需依赖项的整个依赖关系图来恢复包
  • 如果机器上没有安装。net Core,则发布带有执行应用事件所需的所有文件的应用

创建一个 ASP.NET Core MVC 应用在 Linux

在这个食谱中,我们将创建一个 ASP.NET Core MVC 应用在 Linux。 为了实现这个功能,我们必须在 Ubuntu 上安装所有必要的库、组件和 IDE。

准备

出于成本考虑,我们可能会对在 Linux 基础设施上托管我们的网站感兴趣。 有了云计算的可能性,我们可以考虑用 ASP 托管 Linux VM.NET Core 能力。

对于本教程,我们将使用 Ubuntu 17.10,但您也可以使用其他 Linux 发行版,如 Debian、CentOS、Fedora 或任何支持 Docker 引擎的 Linux 发行版。

在。net Core 之前,有一个在 Linux 上运行。net 应用的Mono框架(http://www.mono-project.com/)。 Mono.NET框架的一个开源的跨平台端口,其中包含一个Apache模块来托管 ASP.NET 应用。

目前,. net 应用总是需要Mono才能在 Linux 或 OS X 上运行,因为并不是所有的 BCL(.NET框架基类库)都完全移植到 Linux 上。

主办我们的 ASP.NET Core 2.0 应用,我们将使用 Kestrel(你可以在https://github.com/aspnet/KestrelHttpServer阅读更多)作为一个WebServer,它是一个轻量级的跨平台 web 服务器,能够执行 ASP.NET Core 代码。 Kestrel 在内部使用 Libuv 作为一个多平台异步的IOTCP库,Node.js 也使用 Libuv。

目前,我们还没有其他的 web 服务器可以用来托管 ASP.NET Core 应用在 Linux 或 macOS 上,而 Kestrel 还不能用于生产。 我们也可以使用 IIS 或WebListener作为 web 服务器来托管 ASP.NET Core 应用,但只适用于 Windows。

怎么做……

在 Linux 上安装。net Core 之后,创建一个新项目就很容易了。

让我们开始创建一个新项目:

  1. 从命令行运行dotnet new mvc。 这个命令将创建一个新的 ASP.NET Core MVC 项目与包含的文件夹同名。 如果我们想给项目一个不同的名称,应该添加-n PROJECTNAME switch

  2. 接下来,我们需要在项目文件夹中运行dotnet restore。 大多数 ide 在后台为我们运行dotnet restore,比如 Visual Studio 和 Visual Studio Code

它是如何工作的…

dotnet CLI 将为我们选择的项目模板生成所需的所有文件。

dotnet run命令将用于启动 ASP.NET Core MVC 项目:

创建一个 ASP.NET Core MVC 应用在 Linux 与 Docker

在这个食谱中,我们将学习如何创建一个 ASP.NET Core MVC 应用在 Linux 上使用 Docker,新的Container技术。

准备

我们还可以选择使用 Docker 来创建、托管和发布一个 ASP.NET Core MVC 应用在 Linux。 Docker 是一种操作系统和软件,你可以用它作为服务器来运行你的应用(通常在本地或云中作为虚拟机使用)。 我们使用 Docker 容器作为一个轻量级的虚拟机,它只包含运行应用所需的文件(系统、工具、运行时、库和代码),它启动得更快,并且独立于它所评估的环境运行。

怎么做……

在我们的菜谱中,我们将使用 Linux Ubuntu 17.10 虚拟机本地创建一个 Docker 容器来发布和托管我们的 ASP.NET Core MVC 应用。

在这个食谱中,我们将做以下操作:

  1. 在开始之前,你可以安装 Nautilus,这是 Windows 上类似 gnome 的资源管理器的文件管理器,它允许你在一个文件夹中右键单击来打开终端:
$ apt-get install nautilus-open-terminal 

$ killall nautilus && nautilus
  1. 下载并安装 Docker 到我们的 Ubuntu 虚拟机:
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 

$ sudo sh -c "echo deb https://get.docker.com/ubuntu docker main > /etc/apt/sources.list.d/docker.list" 

$ sudo apt-get update 

$ sudo apt-get install lxc-docker 
  1. 将当前用户加入 Docker 组,然后注销并重新登录:
$ sudo usermod -aG docker  

$ sudo service docker restart 

Note: We don't need to write sudo before the command lines anymore, because now we have enough rights to execute the command without writing sudo.

  1. 从 HelloWeb 示例https://github.com/aspnet/Home/tree/dev/samples/latest/HelloWeb下载project.jsonStarup.cs。 这两个文件是运行应用所需的惟一强制文件。
  2. 创建一个名为HelloWeb的目录,并将前面两个文件放在其中。

  3. 创建一个没有扩展名的文件Dockerfile,然后插入以下代码:

# This code will download and use the last ASP.NET 5 Docker 
 # image based on Mono at 
 # https://github.com/aspnet/aspnet-docker/blob/master/1.0.0-
 # rc1-update1/Dockerfile

FROM Microsoft/aspnet:latest 

# This code copies the project into the folder and restores 
 # the packages using dotnet CLICOPY . /app
 WORKDIR /app
 RUN ["dotnet","restore"] 

# Open this port in the container 
EXPOSE 5000 

# Start application using DNX and the command from 
 # project.json to call kestrel 
ENTRYPOINT ["dotnet","run"] 
  1. 保存并关闭Dockerfile
  2. 然后,验证现有的容器(不是强制的):
$ sudo docker images
  1. 我们还可以检查运行中的容器(不是强制的):
$ docker ps
  1. 你现在可以构建你的应用:
$ docker build -t  
  1. 运行它(端口5004是 Kestrel 的默认端口):
$ docker run -t -d -p 5004:5004 
  1. 您可以在http:localhost:5004上看到主页。

它是如何工作的…

web 服务器通常为 web 应用使用端口80,而 Kestrel 将使用端口50005004。 我们知道我们不能在 Linux 上使用默认用户权限打开低于1024的端口。 ASP.NET Core 应用使用80端口,并且要在 Linux 上做好生产准备,我们必须使用 Nginx 和 Kestrel 来为我们带来所有我们需要的、Kestrel 没有的 web 服务器特性,比如负载平衡、缓存和安全等等。

我们可以把 Docker 容器想象成一个迷你虚拟机,它拥有运行应用所需的最小操作系统和软件组件,与其他应用容器隔离开来。 Docker 是轻量级的、开放的、安全的,可以将应用彼此隔离。 您可以在https://www.docker.com/查阅 Docker 文档。

我们可以在 Windows、macOS、Linux (Ubuntu、RedHat、Suse、Arch、Debian 等)和云(Azure、AWS、谷歌等)上创建 Docker 容器。 它通常会在 Linux 发行版上运行,但 Windows 也会支持它。

创建一个 ASP.NET Core MVC 应用在 macOS

在本教程中,我们将学习如何安装。net Core 组件,以便创建一个 ASP.NET Core MVC 应用在 macOS。

准备

因为 macOS 是基于 Unix 的,所以可以通过Mono项目在 macOS 上运行。net 应用。 正如前面提到的,目前,. net 应用需要Mono在 Linux 或 macOS 上运行。

为了安装Mono,我们使用Homebrew(http://brew.sh/),它是 macOS 的包管理器。

We suppose that you have the necessary privileges to execute all these commands. If not, prefix sudo before all the command lines and you should be good to go.

怎么做……

在这个食谱中,我们将做以下操作:

  1. 在终端输入以下命令安装Homebrew:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 

  1. 使用Homebrew得到DNVMDNX,和DNU,命令如下:
$ brew tap aspnet/dnx 

$ brew update 

$ brew install dnvm 

$ source dnvm.sh 
  1. 安装 Node.js 和 npm (npm 会自动安装 Node.js):
$ brew install node
  1. 验证 Node.js 和 NPM 版本:
$ node -v 

$ npm -v 

当前使用的版本将显示在您的屏幕上如下:

  1. 安装YeomanGulp以帮助自动化任务:
$ npm install -g yo gulp 

$ npm install -g generator-aspnet 

  1. Yeoman询问我们希望创建什么类型的应用。 在我们的例子中,我们选择 Web Application Basic。
  2. 然后,Yeoman询问要创建的应用的名称,如下面的截图所示。
  3. Yeoman将生成运行 ASP 所需的所有文件.NET Core MVC 应用。 在创建项目之后,Yeoman向我们展示了可以用来运行应用的不同命令。
  4. 使用cd "nameoftheapplication"命令,我们被放置在应用目录中。

  5. 之后,我们可以运行dotnet restore命令,该命令将恢复运行应用所需的所有依赖项。 在后台,该命令将连接到NuGet在线存储库进行下载,因为NuGet将缺少的依赖项打包:

  1. 构建并运行webapp1,输入以下命令:
$ dotnet run 

执行上述命令后,在localhost:5000得到以下输出:

创建并运行 ASP。 Azure 上的 NET Core MVC 应用

在本教程中,我们将创建一个 web 应用并将其部署到 Azure 中。

开始

我们将使用Visual Studio 2017 Community Edition,并使用 ASP 创建一个 web 应用。 Visual Studio 中的 NET Core 模板。

怎么做……

  1. 首先,让我们通过点击 new | project | ASP 来创建一个新项目。 | Web 应用创建一个 Web 应用运行与 asp.net.NET Core:

When you run a web application in Visual Studio 2017, you have the choice to develop, debug, and deploy a web application in two different runtime versions, which have themselves two versions for the processor architecture as follows:

  • CLR x86(.NET 4.6 32 位,仅适用于 Windows)
  • CLR x64 NET 4.6 64 位,仅适用于 Windows)
  • CoreCLR x86 NET Core 32 位,跨平台)
  • CoreCLR x64(.NET 内核 64 位,跨平台)

  • 让我们通过在 Azure 上创建一个网站来进行第一次部署。 为此,右键单击项目的根目录并选择 Publish....

  • Publish Web对话框将打开:

  1. 点击 Microsoft Azure App Service。 “创建应用服务”对话框将打开:

  1. 我们需要给出一个 App 名。
  2. 选择订阅。
  3. 选择或创建应用服务计划。
  4. 选择资源组(可选)。
  5. 选择地区(可选)。
  6. 选择或创建一个数据库服务器(可选)。

  7. 现在 Create 按钮启用了,我们点击它:

在前面的屏幕截图中,我们可以看到部署文件的预览。

  1. 点击发布:

在前面的屏幕截图中,我们可以在输出窗口中看到构建和发布的结果。

在下面的截图中,我们可以看到我们的 web 应用是如何在 Azure 上部署的:

看看下面的截图。 我们可以在PublishProfiles文件夹中看到 web 应用的发布设置作为一个.pubxml文件。

它是如何工作的…

我们可以将以下应用发布到 Azure 平台:

  • net web 应用
  • .NET Core web 应用
  • Java web 应用
  • node . js 的 web 应用
  • PHP web 应用
  • Python web 应用
  • Ruby 的 web 应用

Azure 使得部署和运行基于 web 的应用变得非常容易。