专栏首页逸鹏说道.NET跨平台之旅:在Linux上以本地机器码(native)运行ASP.NET Core站点

.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狂(dotNetCrazy),作者:博客园

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-03-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 破解也进化之~分布式多线程破解压缩密码

    现在各种网站架构升级,各种加密算法升级,破解工具如果还是单机多线程的好像是有点跟不上时代了? so==》Bruteforcer:分布式多线程破解RAR文件密码(...

    逸鹏
  • 验证码识别,发票编号识别

    毕业设计做了一个简单的研究下验证码识别的问题,并没有深入的研究,设计图形图像的东西,水很深,神经网络,机器学习,都很难。这次只是在传统的方式下分析了一次。 今...

    逸鹏
  • Bootstrap-Select 动态加载数据的小记

    关于前端框架系列的可以参考我我刚学Bootstrap时候写的LoT.UI http://www.cnblogs.com/dunitian/p/4822808.h...

    逸鹏
  • 火力十足!区块链、比特币热词频频上榜

    2017年至今,区块链在短时间内吸引了众多银行业巨头加盟,在各大银行背书和利好的消息刺激下,资本热捧,峰会不断,创业公司如雨后春笋般兴起。比特币的热度...

    躲在树上的域小名
  • 重磅!3个极品两声母域名同时交易 成交价或达8位数?

    2017年8月31日上午,三字母域名Bic.com被法国知名企业比克公司收购的消息,堪称米市的一大重磅交易。而当天下午外媒又曝猛料,三枚两声母域名DP.com、...

    躲在树上的域小名
  • Hyperledger fabric部署

    这里是根据官方文档https://docs.docker.com/install/linux/docker-ce/ubuntu/推荐的通过仓库下载的方法,注意用...

    zhayujie
  • C#判断文件属于文本或二进制

    其实标题说错了,所有的文件储存都是二进制,但我们想区别的是那些可以当做文本来读的,如 .txt,.cs,.c 的文件和一般的不是文字的文件。 我们有什么办法可区...

    林德熙
  • yaml和python关系实例

    base:   - name: wang   - age: 33   - site:     - web1: http:/www/baidu.com     -...

    py3study
  • 为什么浏览器不能跨域

     现在很多人特别是前端开发人员,在ajax请求,XMLHttpRequest的过程中会碰到一个问题,那就是跨域请求:

    跟着阿笨一起玩NET
  • 腾讯云流式TTS语音合成客户端实现

    接入文档链接:https://cloud.tencent.com/document/api/441/19499

    用户1530353

扫码关注云+社区

领取腾讯云代金券