今天开始学习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. java javassis crack class

    java javassis crack class java 反编译 android 反编译   1. jad http://varaneckas.com/jad/jad158e.linux.inte ...

  2. 【转】《JAVA与模式》之责任链模式

    <JAVA与模式>之责任链模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述责任链(Chain of Responsibility)模式的: 责任链模式是一种对象的行为模 ...

  3. JS基础知识简介

    使用js的三种方式 1.HTML标签内嵌js <button onclick="javascript:alert(真点啊)">有本事点我</button> ...

  4. Nuxt使用Vuex

    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 基础知识这里不再重述,学习的话请自行到官网 ...

  5. jquery on 确认删除

    $(document).on('click', '.delbtn', function() {         if (confirm("确定要删除吗?")) {          ...

  6. leetcode第一刷_Rotate Image

    这个题该怎么说呢.旋转又要求inplace.一般就是要找到某种规律了.这个还是非常明显的,画一下原来的.再画一下旋转之后的.看看原来的跑到什么位置了. 牵扯到四个位置按顺时针方向互换一下位置,发现仅仅 ...

  7. 20170411 F110初始界面-建议清单

    功能块代码              F110 开发类                  FIBP  事务说明              自动付款参数 程序                  SAPF ...

  8. 剑指offer 面试66题

    面试66题: 题目:构建乘积数组 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]* ...

  9. Log level with log4j and Spark

    Log Level Usages OFF This is the most specific, which allows no logging at all FATAL This is the mos ...

  10. Yii2 注册表单验证规则 手机注册时候使用短信验证码

    public function rules() { return [ ['username', 'filter', 'filter' => 'trim'], ['username', 'requ ...