• 热门专题

.NET跨平台之旅:在Linux上以本地机器码(native)运行ASP.NET Core站点

作者:博客园团队  发布日期:2016-03-14 20:54:55
Tag标签:机器码  之旅  站点  
  • 在将“.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
About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规