.NET Core 是一个通用开发平台,由 Microsoft 和 GitHub 上的 .NET 社区共同维护。 它是跨平台的,支持 Windows、macOS 和 Linux,并且可用于设备、云和嵌入式/IoT 方案。
.NET Core 支持使用 C#、Visual Basic 和 F# 语言编写的应用程序和库。
.NET Core 可以用来搭建 Web应用、微服务、创立应用库和控制台应用。
.NET Core 特性
部署灵活:可以包含在应用或已安装的并行用户或计算机范围中。
跨平台:可以在 Windows、macOS 和 Linux 上运行;也可移植到其他操作系统。 Microsoft、其他公司和个人提供的支持的操作系统 (OS)、CPU 和应用程序方案会随着时间推移而增多。
命令行工具:可在命令行中执行所有产品方案。
兼容性:.NET Core 通过 .NET 标准与 .NET Framework、Xamarin 和 Mono 兼容。
开放源:.NET Core 是一个开放源平台,使用 MIT 和 Apache 2 许可证。 文档由 CC-BY 许可发行。 .NET Core 是一个 .NET Foundation 项目。
由 Microsoft 支持:.NET Core 由 Microsoft 依据 .NET Core 支持提供支持
.NET Core 组成
.NET 运行时:提供类型系统、程序集加载、垃圾回收器、本机互操作和其他基本服务。
框架库:提供基元数据类型、应用编写类型和基本实用程序。
.NET Core SDK 工具和语言编译器:相关系列的SDK工具和语言编译器。
.NET Core 应用的命令行工具集。
安装 .NET Core
.NET Core 目前一共发行了 1.x 和 2.x 两个大版本,两个版本可支持的操作系统版本也有所不同,具体如下:
.NET Core 1.x 支持的 Linux (仅支持 64 位) 发行版本:
Red Hat Enterprise Linux 7
CentOS 7
Oracle Linux 7
Fedora 24
Debian 8.2 or later versions
Ubuntu 14.04, Ubuntu 16.04, Ubuntu 16.10*
Ubuntu 16.10 is supported by the latest patch release of .NET Core 1.1
Linux Mint 17
openSUSE 42.1 or later versions (.NET Core 1.1)
.NET Core 安装还是比较简单,直接通过官方提供的软件源便可很容易的完成安装。这里以 Ubuntu 16.04 为例:
1 2 3 4 5 6 7 8 9 # 增加软件源并导入密钥 $ sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet-release/ xenial main" > /etc/apt/sources.list.d/dotnetdev.list' $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys B02C46DF417A0893 # 更新软件源列表 $ sudo apt-get update # 安装.NET Core $ sudo apt-get install dotnet-dev-1.0.4 # 验证安装的.NET Core版本 $ dotnet --version
更多发行版本的安装可参考:https://docs.microsoft.com/en-us/dotnet/core/linux-prerequisites?tabs=netcore1x
.NET Core 2.x 支持的 Linux (仅支持 64 位) 发行版本:
Red Hat Enterprise Linux 7
CentOS 7
Oracle Linux 7
Fedora 25, Fedora 26
Debian 8.7 or later versions
Ubuntu 17.04, Ubuntu 16.04, Ubuntu 14.04
Linux Mint 18, Linux Mint 17
openSUSE 42.2 or later versions
SUSE Enterprise Linux (SLES) 12 SP2 or later versions
.NET Core 2.x 的安装和 .NET Core 1.x 类似,同样可以直接通过官方提供的软件源来完成安装。这里以 Ubuntu 16.04 为例:
1 2 3 4 5 6 7 8 9 10 11 # 增加软件源并导入密钥 $ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg $ sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg $ sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-xenial-prod xenial main" > /etc/apt/sources.list.d/dotnetdev.list' # 更新软件源列表 $ sudo apt-get update # 安装.NET Core $ sudo apt-get install apt-transport-https $ sudo apt-get install dotnet-sdk-2.1.4 # 验证安装的.NET Core版本 $ dotnet --version
更多发行版本的安装可参考:https://www.microsoft.com/net/learn/get-started/
Core 项目
在当前目录下建立一个 myApp 目录并使用 console 模板初始化一个项目。
1 $ dotnet new console -o myApp
该项目成功编译运行会在终端输出一个 Hello World!。
1 2 $ dotnet run Hello World!
创建 Core 网站
下载演示代码
这里使用 NETCoreBBS 这个项目来演示,NETCoreBBS 是一个轻量级的论坛应用。首先下载代码:
1 $ git clone https://github.com/linezero/NETCoreBBS
NETCoreBBS 项目默认运行在 80 端口,如果和你本地端口冲突。可以到 Program.cs 中更改。
1 2 3 4 $ vim NETCoreBBS/src/NetCoreBBS/Program.cs # 默认为 80 端口,这里修改为 8000 端口 .UseUrls("http://*:8000")
发布应用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 $ cd NETCoreBBS $ dotnet restore $ dotnet publish .... Restore completed in 3.24 ms for /root/dotnet/NETCoreBBS/src/Infrastructure/Infrastructure.csproj. Bundling with configuration from /root/dotnet/NETCoreBBS/src/NetCoreBBS/bundleconfig.json Processing wwwroot/css/site.min.css Minified Processing wwwroot/js/site.min.js wwwroot/js/site.js was not found ApplicationCore -> /root/dotnet/NETCoreBBS/src/ApplicationCore/bin/Debug/netstandard2.0/ApplicationCore.dll ApplicationCore -> /root/dotnet/NETCoreBBS/src/ApplicationCore/bin/Debug/netstandard2.0/publish/ UnitTests -> /root/dotnet/NETCoreBBS/tests/UnitTests/bin/Debug/netcoreapp2.0/UnitTests.dll UnitTests -> /root/dotnet/NETCoreBBS/tests/UnitTests/bin/Debug/netcoreapp2.0/publish/ Infrastructure -> /root/dotnet/NETCoreBBS/src/Infrastructure/bin/Debug/netstandard2.0/Infrastructure.dll Infrastructure -> /root/dotnet/NETCoreBBS/src/Infrastructure/bin/Debug/netstandard2.0/publish/ NetCoreBBS -> /root/dotnet/NETCoreBBS/src/NetCoreBBS/bin/Debug/netcoreapp2.0/NetCoreBBS.dll Bundling with configuration from /root/dotnet/NETCoreBBS/src/NetCoreBBS/bundleconfig.json Processing wwwroot/css/site.min.css Processing wwwroot/js/site.min.js wwwroot/js/site.js was not found NetCoreBBS -> /root/dotnet/NETCoreBBS/src/NetCoreBBS/bin/Debug/netcoreapp2.0/publish/
编译成功后会在项目下生成一个 publish 目录,这就是默认发布生成的文件夹,在这个文件夹中可以看到我们程序所有依赖的程序集文件。
1 2 3 4 5 6 7 $ ls ./src/NetCoreBBS/bin/Debug/netcoreapp2.0/publish/ ... ApplicationCore.dll Microsoft.AspNetCore.JsonPatch.dll Microsoft.EntityFrameworkCore.Design.dll Microsoft.VisualStudio.Web.CodeGeneration.EntityFrameworkCore.dll ApplicationCore.pdb Microsoft.AspNetCore.Localization.dll Microsoft.EntityFrameworkCore.dll Microsoft.VisualStudio.Web.CodeGeneration.Templating.dll appsettings.json Microsoft.AspNetCore.Mvc.Abstractions.dll Microsoft.EntityFrameworkCore.Relational.dll Microsoft.VisualStudio.Web.CodeGeneration.Utils.dll ....
publish 目录里常用文件说明:
1 2 3 4 5 appsettiong.json # 应用程序的配置文件 refs # 应用程序引用的 .net fx系统程序集 runtimes # 运行时环境,可以看到里面的文件夹包含 Windows、Linux,macOS等,说明我们这个应用程序是跨平台的。 views # 存放的是 mvc 的视图文件。 wwwroot # 存放的是前端使用的 js 库,css 样式表,和图片等。
如果你要将编译结果输出到指定目录,可以使用以下命令来完成。
1 $ dotnet publish -c Release -o /tmp/bbs.hi-linux.com
1 2 3 4 5 6 7 8 9 # 把工作目录切换到需要发布的文件夹,这里是默认的 publish。 $ cd ./src/NetCoreBBS/bin/Debug/netcoreapp2.0/publish/ # 发布应用 $ dotnet NetCoreBBS.dll Hosting environment: Production Content root path: /root/dotnet/NETCoreBBS/src/NetCoreBBS/bin/Debug/netcoreapp2.0/publish Now listening on: http://[::]:8000 Application started. Press Ctrl+C to shut down.
打开浏览器访问 http://IP:8000/
,成功出现以下页面就表示部署成功了。
使用 Supervisor 让应用在后台运行
默认情况下 .NET Core 在前台进程运行,如果要将服务放到后台我们这里可以使用 Supervisor 来实现。
1 $ sudo apt-get install supervisor
安装好 Supervisor 以后,下面就在 Supervisor 中配置一个 NetCoreBBS 的后台守护。
要增加一个应用的后台守护,我们需要在 /etc/supervisor/conf.d/
目录中新增一个 NetCoreBBS.conf 的配置文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $ vim /etc/supervisor/conf.d/NetCoreBBS.conf [program:NetCoreBBS] directory=/root/dotnet/NETCoreBBS/src/NetCoreBBS/bin/Debug/netcoreapp2.0/publish command=dotnet NetCoreBBS.dll autostart=true autorestart=true startsecs=10 startretries=50 stderr_logfile=/var/log/NetCoreBBS.err.log stdout_logfile=/var/log/NetCoreBBS.out.log environment=ASPNETCORE__ENVIRONMENT=Production user=root stopsignal=INT
1 2 $ /etc/init.d/supervisor restart [ ok ] Restarting supervisor (via systemctl): supervisor.service.
如果一切配置正确,查看相应日志你可以看到类似以下输出,表示应用已正常启动。
1 2 3 4 5 $ tail -f /var/log/NetCoreBBS.out.log Hosting environment: Production Content root path: /root/dotnet/NETCoreBBS/src/NetCoreBBS/bin/Debug/netcoreapp2.0/publish Now listening on: http://[::]:8000 Application started. Press Ctrl+C to shut down.
配置 Nginx 反向代理
通常现在主流的 Web 服务器都使用的 Nginx,相应的 80 端口也被占用了。如果你想把 .NET 应用也运行在 80 端口,这时只需在 Nginx 上增加一个网站的反向代理就可实现。
Nginx 使用非常的广泛了,之前也讲过很多了。关于 Nginx 的安装使用这里就不再赘述了。Nginx 配置文件片断如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 server { listen 80; server_name bbs.hi-linux.com; location / { proxy_pass http://127.0.0.1:8000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $http_host; proxy_cache_bypass $http_upgrade; } }
到此,我们就演示了如何在 Ubuntu 上搭建了一个完整的 .NET 应用。
参考文档
https://www.google.com
https://aka.ms/dotnet-docs
https://aka.ms/dotnet-cli-docs
http://blog.topspeedsnail.com/archives/6559
https://docs.microsoft.com/zh-cn/aspnet/core/
https://www.microsoft.com/net/learn/get-started/
http://www.cnblogs.com/linezero/p/aspnetcoreubuntu.html
https://www.cnblogs.com/savorboard/p/dotnet-core-publish-nginx.html
https://www.microsoft.com/net/download/linux-package-manager/ubuntu14-04/sdk-current