.Net Core发布运行

Mac上面创建的项目拉到win下可以不改任何代码,也能成功编译运行

部署方式

参考资料:http://dotnet.github.io/docs/core-concepts/app-types.html


上面的开发过程中都是直接在IDE里面运行的,或者用 dotnet run 来直接运行的,那么我们编译好之后如何脱离IDE来运行呢?


我们也可以到编译成功的目录 netcoreapp1.0 下面输入命令

dotnet LearnDotnetCore.dll

来运行我们的程序。

可以在project.json加个 runtimes 属性,然后编译出一个exe文件,然后直接运行exe。

要编译成Release的话,可以用命令

dotnet build --configuration Release --no-dependencies --no-incremental



第一种编译的配置


{
"version": "1.0.0-*",
"buildOptions": {
    "emitEntryPoint": true
},
"dependencies": {
    "Microsoft.NETCore.App": {
    "type": "platform",
    "version": "1.0.0-rc2-3002702"
    }
},
"frameworks": {
    "netcoreapp1.0": {
    "imports": "dnxcore50"
    }
}
}

第二种编译的配置


{
"version": "1.0.0-*",
"buildOptions": {
    "emitEntryPoint": true
},
"dependencies": {
    "Microsoft.NETCore.App": {
    //"type": "platform",
    "version": "1.0.0-rc2-3002702"
    }
},
"frameworks": {
    "netcoreapp1.0": {
    "imports": "dnxcore50"
    }
},
"runtimes": {
    "win10-x64": {},
    "osx.10.11-x64": {}
}
}

第二种配置使用dotnet publish会把core的支持运行一起打包处理,然后相关的平台就不用安装net core,但是不同平台需要不同编译。具体的效果和目录结构我就不进行截图了,有兴趣的自己编译看看。


控制台项目改造成web项目


前面介绍了如何编译和运行控制台的程序,但是在这个互联网的时代,我感觉要做成一个web项目可能会更有趣,我们看看如何直接把前面控制台的项目变成web项目。


参考资料:https://docs.asp.net/en/latest/getting-started.html


vs修改运行

首先修改配置 project.json,在属性dependencies添加Kestrel依赖。


4.png


第二添加一个类Startup

using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
namespace LearnDotnetCore
{
    public class Startup
    {
        public void Configure(IApplicationBuilder app)
        {
            app.Run(context =>
            {
                return context.Response.WriteAsync("Hello from ASP.NET Core!");
            });
        }
    }
}

然后修改Program.cs


using System;
using Microsoft.AspNetCore.Hosting;
namespace LearnDotnetCore
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                .UseStartup<Startup>()
                .Build();
            host.Run();
        }
    }
}

然后点击运行按钮,程序成功的运行起来

1.png


打开浏览器访问 http://localhost:5000/ 我们可以看到浏览器打印出 Hello from ASP.NET Core!证明我们的程序已经编译并运行成功。


发布并部署iis

虽然说直接运行可以访问成功,但是有的人就是喜欢部署到IIS上面去,所以这里也尝试一下部署到IIS上面是什么样的。


参考资料:https://docs.asp.net/en/latest/publishing/iis.html


安装完IIS后需要安装 DotNetCore.1.0.0.RC2-WindowsHosting来支持 net core 在iis上面运行


然后修改project.json的内容,添加下面三个东西,来支持iis运行

2.png

然后修改Program.cs,添加iis支持

using System;
using System.IO;
using Microsoft.AspNetCore.Hosting;
namespace LearnDotnetCore
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                
                .UseStartup<Startup>()
                .Build();
            host.Run();
        }
    }
}

添加文件 web.config


<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!--
    Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
-->
<system.webServer>
    <handlers>
    <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
    </handlers>
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
</system.webServer>
</configuration>

上面三个修改完之后,就可以来发布,选择项目邮件,然后选择发布会出现一个窗口

3.png

输入名称,然后next或者直接publish,操作完成后会生成一堆文件。然后到iis里面创建 Web 站点,然后绑定发布目录就行,应用程序池的模式需要改为“无代码托管”。


启动网站运行后,浏览器输入http://localhost/ 

可以看到浏览器打印出 Hello from ASP.NET Core!和上面没有在iis里面运行的效果是一样的。

running-output.png

NetCore在Linux上的部署运行

linux环境:centos系统

参考资料:https://www.microsoft.com/net/core#centos


输入安装命令:

curl -sSL https://raw.githubusercontent.com/dotnet/cli/rel/1.0.0-preview1/scripts/obtain/dotnet-install.sh | bash /dev/stdin --version 1.0.0-preview1-002702 --install-dir ~/dotnet

结果返回了错误。


dotnet_install: Error: Unable to locate libunwind. Install libunwind to continue
dotnet_install: Error: Unable to locate libicu. Install libicu to continue
dotnet_install: Error: Unable to locate gettext. Install gettext to continue


看起来是缺少了几个玩意,那好吧先来下载安装,使用yum命令来安装


yum install libunwind
yum install libicu
yum install gettext

重新输入安装命令:

curl -sSL https://raw.githubusercontent.com/dotnet/cli/rel/1.0.0-preview1/scripts/obtain/dotnet-install.sh | bash /dev/stdin --version 1.0.0-preview1-002702 --install-dir ~/dotnet

这次返回的信息是


dotnet-install: Downloading https://dotnetcli.blob.core.windows.net/dotnet/beta/Binaries/1.0.0-preview1-002702/dotnet-dev-centos-x64.1.0.0-preview1-002702.tar.gz
dotnet-install: Extracting zip
dotnet-install: Adding to current process PATH: /root/dotnet. Note: This change will be visible only when sourcing script.
dotnet-install: Installation finished successfuly.

然后再输入命令

sudo ln -s ~/dotnet/dotnet /usr/local/bin

说明:ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。


然后我们再来输入 dotnet 命令看看是否真的安装成功了。安装成功之后我们就要把之前编译发布好的文件给上传到vps上面去。(记住是要上传 dotnet publish发布出来的那些文件)


可以使用scp命令来上传,命令参考:http://www.cnblogs.com/peida/archive/2013/03/15/2960802.html


文件上传成功后我们执行 dotnet LearnDotnetCore.dll 命令来运行我们的网站程序。返回一下信息


Hosting environment: Production
Content root path: /root/www/publish
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.

说明我们的程序已经成功运行起来,然后我们打开浏览器访问我们的vps地址,发现并没打印出信息。那是因为程序默认绑定的是http://localhost:5000, 所以我们访问ip的是访问不到,那有两种办法可以实现我们使用ip访问,第一种修改程序添加绑定例如下面:


public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseUrls("http://192.168.0.102:5000")
            .UseStartup<Startup>()
            .Build();
        host.Run();
    }

第二种可以使用代理,我这里选择Nginx。安装参考资料:https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-centos-7


由于没有玩过Linux所以经过几番波折啊,首先80端口被Apache http占用启动不了,然后防火墙阻止了80端口。最后终于成功的看到了这个页面


5.png

然后配置代理,找到Nginx里面的配置把location /改成如下


location / {
  # 传递真实IP到后端
  proxy_set_header Host $http_host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_pass   localhost:5000;
}


保存后,重启一下Nginx,然后再运行我们前面上传上去的net core网站,再打开浏览访问我们vps的地址,浏览器打印出了 Hello from ASP.NET Core!


6.png



本文转载自:http://www.cnblogs.com/caipeiyu/p/5537021.html