.NET跨平台之旅:在Linux上以本地机器码(native)运行ASP.NET Core站点
在将“.NET跨平台之旅”示例站点 about.cnblogs.com 从 ASP.NET 5 RC1 升级至 ASP.NET Core 1.0 (博文链接)之后,我们有一个难以抗拒的冲动 —— 体验一下 dotnet cli 引入的一个最激动人心的特性 —— 将 .NET 程序编译为本地(native)机器码。对应于我们的示例站点,就是将 ASP.NET Core 应用程序编译为本地机器码。
如何编译呢?非常简单,只需运行下面的命令:
dotnet build --native
编译输出如下:
Project AboutUs (.NETStandardApp,Version=v1.3) will be compiled because some of its inputs were newer than its oldest output.
Compiling AboutUs for .NETStandardApp,Version=v1.3 Compilation succeeded.
0 Warning(s)
0 Error(s) Time elapsed 00:00:02.7095915
Input Assembly: /data/AboutUs/bin/Debug/netstandardapp1.3/AboutUs.dll
然后看一下 bin/Debug/netstandardapp1.3/ 文件夹中的内容:

ubuntu.14.04-x64 文件夹中的内容就是 native build 的输出,AboutUs 是可执行文件。
接下来,激动人心的时刻就要到了 —— 我们将以 AboutUs 这个编译为本地机器码的可执行文件运行 ASP.NET Core 站点。
在运行之前,需要做2个小小的准备工作:
1)为了与示例站点源代码所在的项目文件夹划清界线,我们新建了一个 about.cnblogs.com 文件夹,并将 ubuntu.14.04-x64 文件夹中的所有文件复制到这个文件夹。
2)将 config.json 文件复制到 about.cnblogs.com 文件夹中,示例站点有数据库操作(数据库用的是SQL Server),config.json 中存放着数据库连接字符串。
做好准备工作,演出就开始了!我们在 about.cnblogs.com 文件夹中运行下面的命令:
./AboutUs
控制台输出如下:
dbug: Microsoft.AspNetCore.Hosting.Internal.WebHost[3]
Hosting starting
dbug: Microsoft.AspNetCore.Hosting.Internal.WebHost[4]
Hosting started
Hosting environment: Production
Application base path: /data/websites/about.cnblogs.com
Now listening on: http://*:8001
Application started. Press Ctrl+C to shut down.
太帅了!站点成功运行起来了!
浏览器访问站点,一切正常。你现在看到的 about.cnblogs.com 就是在 Linux Ubuntu 服务器上以 native 方式运行的。
以前只能在做梦时才敢想想的事情,现在正在逐渐成为现实。
注:我们在用 dotnet build --native 命令编译时,有时 ubuntu.14.04-x64 文件夹中无输出,可以改用
dotnet build --native --no-incremental 命令解决这个问题。
【更新】
后来出现502错误与.NET Core没有关系,是因为没有以后台服务的方式运行命令,ssh会话一断开,进程就结束了。现已改为用下面的命令运行:
screen -d -m -s "AboutUs" /data/websites/about.cnblogs.com/AboutUs
.NET跨平台之旅:在Linux上以本地机器码(native)运行ASP.NET Core站点的更多相关文章
- 在Linux上以服务的方式运行ASP.NET Core站点
更新:用supervisor是更好的解决方法,详见 Linux下为 dotnet 创建守护进程 要在生成环境下在Linux服务器上跑ASP.NET Core站点,首先要解决的问题是以服务的方式运行AS ...
- 在Linux上用supervisor运行ASP.NET Core站点的一个坑
将一个ASP.NET Core站点在Linux服务器上以self-contained部署方式发布出来后,直接在终端上运行下面的命令,站点可以正常运行. /data/AboutUs/bin/Debug/ ...
- 关于 IIS 上运行 ASP.NET Core 站点的“HTTP 错误 500.19”错误
昨天回答了博问中的一个问题 —— “HTTP 错误 500.19 - Internal Server Error dotnetcore”,今天在这篇随笔中时候事后诸葛亮地小结一下. 服务器是 Wind ...
- .NET跨平台之旅:在生产环境中上线第一个运行于Linux上的ASP.NET Core站点
2016年7月10日,我们在生产环境中上线了第一个运行于Linux上的ASP.NET Core站点,这是一个简单的提供后端服务的ASP.NET Core Web API站点. 项目是在Windows上 ...
- .NET跨平台之旅:将QPS 100左右的ASP.NET Core站点部署到Linux服务器上
今天下午我们将生产环境中一个单台服务器 QPS(每秒请求数)在100左右的 ASP.NET Core 站点部署到了 Linux 服务器上,这是我们解决了在 .NET Core 上使用 EnyimMem ...
- .NET跨平台之旅:生产环境中第2个跑在Linux上的ASP.NET Core站点
今天我们在生产环境中上线了第2个跑在Linux上的ASP.NET Core站点.这是一个简单的Web API站点,通过命令行的方式调用安装在Linux服务器上的程序完成操作.之前用的是nodejs,现 ...
- 以self-contained方式在Linux上部署ASP.NET Core站点
今天准备将一个在Windows上用VS2015开发的ASP.NET Core程序部署到阿里云Linux服务器上,部署时发现这台服务器是内网服务器,无法直接安装.NET Core SDK,于是想到尝试用 ...
- 将asp.net core站点发布到IIS上遇到的问题
今天第一次将整个 asp.net core 站点发布到 IIS 上,以前都是发布到 Linux 服务器上. 开始使用 dotnet publish -c release 命令发布,用浏览器访问站点时出 ...
- 在Azure Container Service创建Kubernetes(k8s)群集运行ASP.NET Core跨平台应用程序
引子 在此前的一篇文章中,我介绍了如何在本地docker环境中运行ASP.NET Core跨平台应用程序(http://www.cnblogs.com/chenxizhang/p/7148657.ht ...
随机推荐
- 类型基础---CLR Via C#笔记一
一.所有类型都是从System.Obejct派生 1.下面两个类型定义是完全一致的: class Employee{ ... } class Employee:System.Object{ ... } ...
- .NET框架解决的问题
面向对象开发环境 自动垃圾收集 互操作性 不需要COM 简化部署 类型安全 基类库
- Sql常用语句(3)
--显示sql server现有的所有数据库 exec sp_helpdb --查看数据表设置的约束 exec sp_helpconstraint SubjectType --update selec ...
- Xcode7.1环境下上架iOS App到AppStore 流程② (Part 二)
前言部分 part二部分主要讲解 iOS App IDs 的创建.概要文件的配置.以及概要文件安装的过程. 一.iOS App IDs 的创建 1)进入如图1所示界面点击右上角箭头所指的加号 进入iO ...
- 转载:TypeScript 简介与《TypeScript 中文入门教程》
简介 TypeScript是一种由微软开发的自由和开源的编程语言.它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程.安德斯·海尔斯伯格,C#的首席架构 ...
- Python ZIP 文件创建与读取
Automate the Boring Stuff 学习笔记 02 Python 内置的 zipfile 模块可以对文件(夹)进行ZIP格式的压缩和读取操作.要进行相关操作,首先需要实例化一个 Zip ...
- java类与实例
最近在看设计模式,感觉自己对java的三大特性的理解不够清晰,搞不清楚抽象类.接口.泛型的用处和优缺点.设计模式学了一半,想着还是停下来脑补一下java的基础,就从java对象开始吧. 一.java对 ...
- linux(八)__yum工具
自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载.安装. 什么是yum? yum工具实例: 因为yum指定的软件仓库源是国外的网站,在国内访问较慢.我们更改它的仓库源. 首先先备 ...
- 窗体作为控件嵌入panel
EyeView frm = new EyeView(); frm.TopLevel = false; frm.Parent = this.panel1; frm.FormBorderStyle = F ...
- SecutrCRTt 连接VirtualBox 中的Ubuntu -端口转发
端口转发: 设置>网络>端口转发 端口转发: 子系统地址通过在Linux系统总使用ifconfig查看: 还需要在linux主机上安装sshd sudo apt-get insta ...