今天开始学习dotnet core的开发,距离Visual Stuio 2017正式版的发布,也就是VS20周岁的生日还有三天,在我的电脑上安装的是VS2017 Enterprise RC版, 在VS2017RC版本中dotnet core的版本是1.1版本,很快随着VS正式版的发布,2.0也随之上线了,dotnet core 1.1版本和之前的1.0版本呢,很大的区别就在于,project.json文件的变化,在1.1版本上,是把project.json合并到了.csproj和MSBuild文件了,没错使用1.1创建的项目,我们熟悉的.csproj解决方案又回来了,project.json文件也不存在了,关于这个的变化在我其中一篇博客中也已经提到了,不多说。本人对刚开始的1.0版本也没过多深入研究,就直接从1.1入手了,说实话有点措手不及,网上教程大都是1.0的教程,还是慢慢摸索吧。

  学习一门语言之前,我们都是从“Hello World”入手的,作为我们这些撸了几年码的人来说,就算了吧,我就偷偷的自己尝试了一下,在这里就不多说了。言归正传,今天直接从网站发布开始学起,先看如何去创建我们的dotnet core web应用程序。

选择新建->项目->.NET Core->ASP.NET Core Web应用程序(.NET Core),这里.net Framework的版本默认的是4.5.2,我都保持默认,不作任何修改了

我选择了ASP.NET Core1.1版本,我也不知道选择1.0有什么不同,只是喜欢保持最新,就选了1.1版本,下面的模板选择Web应用程序,其他的身份验证还有Docker的支持,以后再说。

点击确定后,就看到我们创建好的项目了,看下解决方法的结构,是不是很熟悉的感觉

没错跟MVC是很相似的,MVC6在dotnet core中起了关键性的作用,我们在看下默认创建的HomeController,

在MVC中我们可以在Index右键转到视图,在这里已经不支持了,需要自己去View视图中查看了

为了好看我把这些默认的都删掉,写的简单些,修改后如下图:

下面直接右键在浏览器中查看,如图:

经测试我们的Web应用程序是可以正常运行的,下面我们将我们的Web发布下,发布的是方式跟Asp.Net传统的发布方式是相同的,也不能这么说,才发现在VS2017中发布的界面也改了,已经不是原来的容颜了,找不到之前的配置了,/苦笑,不过大同小异,右键我们的项目选择发布,如图:

我还是默默的选择了文件夹,以前习惯的方式是新建配置文件,现在没有了,在“文件夹”后面一项成了导入配置文件,我猜测当你选择了文件夹后,它会自动生成配置文件

点击发布,毫无疑问成功了,看下发布后的文件夹

我们使用cmd命令切换到这个目录下,输入dir,就可以看到当前文件夹下的所有目录

那么我们怎么测试我们发布的网站能否正常运行呢?继续使用我们的命令行来测试,为了防止VS的干扰,我们将VS关闭,还是保持命令行中切换到发布目录下,我们都知道,在发布的dll文件中,以我们的项目名称生成的dll文件就是我们的Web的主要的dll文件,我们就直接使用dotnet命令启动我们的Web,如图所示:

很明显其中的一句话“Now listening on : http://localhost:5000”,提示我们可以使用此地址进行访问我们的网站了,dotnet core 发布的网站默认端口是5000,

我已经将VS关闭了,所以刚才的地址已经失效了,我们重新使用5000端口进行访问,如图:

以上我们确定我们的Web是没有问题的,那么我们下面将我们的Web应用发布到Linux系统中,本想在Win10里面将Linux启用,谁承想下载了半天总是网络连接失败,使用Putty.exe,

害得我只能买了台阿里云服务器,还好老用户还有50块钱的券,Linux服务器安装的CentOS7.2,我登陆到了Linux 服务器,如图:

以上可以看到Linux的系统信息,这台服务器中呢是没有dotnet 环境的,可以使用命令“dotnet --version”测试,提示dotnet:command not found,

我们需要按照dotnet core官网,安装dotnet环境,这里的版本是CentOS 7.2,转到CentOS安装dotnet core ,安装命令如下:(注意要针对自己的Linux版本安装)

下面开始紧张的环境搭建,就怕会出现错误,最开始从朋友那儿借了台Ubuntu的服务器,一直出错,没有找到解决办法,放弃了。开始第一条命令:

我的内心是鸡冻的,很完美的成功了,继续下一条命令:

悄无声息,不过应该是成功的节奏,继续:

还是悄无声息,再继续:

索性一次性都执行完了,最后看到Hello World,我笑了。我们可以看下他生成了什么文件:

当然这里还是用的project.json文件,之后的版本不知道是怎么样的,慢慢学习吧。到这里,还学习了下怎么通过命令去修改文件的内容,原谅我是Linux小白,

使用命令 vi Program.cs,直接进入这个文件的编辑模式:

通过光标移动,然后修改要修改的内容,编辑完成后,按ESC退出编辑模式,输入“::wq”命令进行保存退出。我们再来执行下这个示例程序

下面我们将刚开始的网站发布到CentOS上,使用了个类似FTP的工具,叫做WinsCP,大家可以直接搜索下载,上图:

这里我们可以看到刚创建的hwapp这个项目的目录,还有个压缩包,那是

安装dotnet时的压缩包,看到这个应该明白了那几天安装命令的含义了。跟使用FTP一样,我们把本地发布的Web应用先上传到服务器上,就不用说怎么用了。

当我们登陆以后,默认显示的是root目录,这里相当于系统的根目录,所以下面在进入相应的文件目录时,注意相对的路径问题。上传完成以后,如图:

下面我们开始启动我们的Web,使用命令行去调用DotNetCoreWebDemo01.dll,我这里是运行成功的。

很奇怪的是,我最开始直接执行dotnet DotNetCoreWebDemo01.dll命令时是报错的,大概的意思是提示找不到project.json文件,如果大家遇到了这个问题的话,

可以把刚刚我们生成的hwapp测试项目中的project.json文件拷贝到web目录下,然后执行“dotnet restore”命令进行还原,会把项目中用到程序包还原到project.json

文件中(或者直接运行dotnet restore命令,我未尝试过,由于做的过程中出现了无法解释的错误,我刚把服务器恢复到了初始状态,再进行发布的时候,居然

不出错了,我也没找到原因,居然直接就执行成功了。。。),我们现在就去运行下我们的Web,好期待。。。

真是当头一棒,很多事真的是经常跟我们想象的相差甚远啊,根据以往的经验,或许是服务器防火墙的原因,应为Web应用程序本身是启动正常的,那我们就看下防火墙。

执行命令:firewall-cmd --state 查看当前防火墙的状态 执行结果为Not Runing,意思就是未运行,现在也不知具体的原因导致为何无法运行。使用命令:

firewall-cmd --list-all 查看当前开放的端口,由于当前FirewallD is not Runing ,所以这些命令都是无法使用的,需要将防火墙开启,相关命令如下:

systemctl start firewalld         # 启动,
systemctl enable firewalld         # 开机启动
systemctl stop firewalld           # 关闭
systemctl disable firewalld       # 取消开机启动,执行start命令后再执行firewall-cmd --list-all 命令,如图所示,没有开放的端口,那我们就把5000端口给开放。

使用命令行:firewall-cmd --zone=public --add-port=5000/tcp --permanent,依次执行

firewall-cmd --reload立刻生效,filrewall-cmd --list-all 显示所有开放端口,此时可以看到 prots那项中,存在5000/tcp,此时已经开放了5000端口,我们再运行

看能否启动我们的Web,首先还是要使用dotnet .dll命令运行Web,再进行端口访问,如图:

还是同样的问题,写到这里,具体的原因我还是不清楚,这里的解决方法在下一篇博客中介绍,解决方案使用Nginx代理服务器,明天见。

扫描二维码关注我的公众号,共同学习,共同进步!

2017-03-04 dotnet core网站发布到Linux系统中的更多相关文章

  1. ASP.NET Core 网站发布到Linux服务器(转)

    出处;ASP.NET Core 网站发布到Linux服务器 长期以来,使用.NET开发的应用只能运行在Windows平台上面,而目前国内蓬勃发展的互联网公司由于成本的考虑,大量使用免费的Linux平台 ...

  2. ASP.NET Core 网站发布到Linux服务器

    长期以来,使用.NET开发的应用只能运行在Windows平台上面,而目前国内蓬勃发展的互联网公司由于成本的考虑,大量使用免费的Linux平台,这就使得.NET空有一身绝技但无法得到广大的施展空间,.N ...

  3. 如何将dotnet core webapi发布到docker中…

    如何将dotnet core webapi发布到docker中 今天想起来撸一下docker,中途还是遇到些问题,但是这些问题都是由于路径什么的导致不正确,在这儿还是记录下操作过程,今天是基于wind ...

  4. 关于.net Core项目发布在Linux上的填坑

    本文主要记录.net Core项目发布在Linux服务器上面所遇到的问题,防止遗忘是 1.在发布文件中执行 dotnet xxxxxx.dll的时候提示如下错误: An assembly specif ...

  5. .Net Core 项目发布到Linux - CentOS 7(一)

    由于项目的需求,需要发布到Linux服务器上,在这里记录一下我发布的过程. 安装Linux 安装liunx系统很简单,网上也有很多教程,我是直接使用阿里云的CentOS 7.7 64位 部署环境 Li ...

  6. AspNet Core 发布到Linux系统和发布IIS 注意项

    AspNet Core 发布到Linux系统和发布IIS 注意项 1.发布时需要注意的 2.Windows Server 2012 api-ms-win-crt-runtime-l1-1-0.dll ...

  7. code first网站发布后数据表中没有数据问题

    code first网站发布后数据表中没有数据问题 (1).将internal sealed class Configuration类访问修饰符改为public  class Configuratio ...

  8. CYQ.Data 正式支持 DotNET Core 版本发布

    闲话几句: 自从上周开始,IOS人员逝去,就开始接手IOS的代码了. 并开始整理IOS的代码(包括当时一开始设计的开发框架). 在未来不远的日子里,设想是有一个系列详细的介绍I恋App和IT连App及 ...

  9. 将Windows系统编译的.NET Core程序发布到Ubuntu系统

    在可移植方面.NET Core应用程序分为两种,Portable application(便捷,需要目标机器安装.NET Core Runtime)和Self-contained applicatio ...

随机推荐

  1. iOS 多线程之 NSThread的基本使用

    一个NSThread对象就代表一条线程 下面是NSThread开启线程的方法 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEv ...

  2. Linux用户相关文件之组文件

    组信息文件: 1.文件地址: /etc/group -rw-r--r--. 1 root root 492 10月 6 21:56 /etc/group 2.文件内容: xiaol:x:500: 3. ...

  3. Parzen-Window Density Estimation(PWDE)

    1.概率密度函数 在在数学中,连续型随机变量的概率密度函数(在不至于混淆时可以简称为密度函数)是一个描述这个随机变量的输出值,在某个确定的取值点附近的可能性的函数.而随机变量的取值落在某个区域之内的概 ...

  4. IP地址处理模块IPy

    IP地址规划是网络设计中非常重要的一个环节,规划的好坏会直接影响路由协议算法的效率,包括网络性能.可扩展性等方面. 在这个过程中,免不了要计算大量的IP地址,包括网段.网络掩码.广播地址.子网数.IP ...

  5. iOS 视频全屏功能 学习

    项目中,也写过类似"视频全屏"的功能, 前一阵子读到今日头条 的一篇技术文章,详细介绍三种旋转方法差异优劣最终择取.文章从技术角度看写的非常好,从用户角度看,也用过多家有视频功能的 ...

  6. deeplink

    http://www.cnblogs.com/shadajin/p/5724117.html Deeplink,简单讲,就是你在手机上点击一个链接之后,可以直接链接到app内部的某个页面,而不是app ...

  7. “中兴捧月”比赛之——二叉查找树(BST)树的最短路径Java求解

    问题描述: BST树,又称二叉查找树,求其到所有叶子节点路径的最小值 测试用例一:  10 5 20 返回15: 测试用例二: 100 20 70 110 120 10 null null 89 nu ...

  8. webpack基础配置

    webpack运行规则: Webpack 会给每个模块分配一个唯一的id并通过这个id索引和访问模块.在页面启动时,会先执行入口文件中的代码,其它模块会在运行 require 的时候再执行. 运行时主 ...

  9. QT 数字图像处理 笔记一

    1.被有符号整数和无符号整数十足的坑了一上午.我在实现图像旋转的时候先把坐标轴中心平移到图像中心:painter.translate(up_x+temp_w,up_y+temp_h);注意这里面各个数 ...

  10. 【Head First Servlets and JSP】笔记18:JSP指令

    mark. jetbrain tomcat配置:https://www.jetbrains.com/help/idea/2017.1/creating-and-running-your-first-w ...