.NET Core学习笔记(1)——在Linux下运行Console APP
都说.NET Core可以跨平台,说实话Linux咱也不太懂,咱也不敢问。怎样把一个简单的Console App在Linux下跑起来,真是费了我一番功夫。特做此篇以供指北。
.NET Core的大饼我就不替某软画了。接下来我们就做个傻瓜教程,把Visual Studio 2019(VS2017也可以)开发的Console App,publish并且在Ubuntu上运行。就其中遇到的问题以及解决方法和大家讨论。
首先我们准备一下环境。Visual studio 2019和.NET Core SDK 2.2。其中Visual Studio可以去这个地址:
https://visualstudio.microsoft.com/downloads/
下载免费的Community版本。这个免费的Community版本绝对良心,除了条款写了不能用作商业用途,跟卖几千刀的版本比并不缺少任何核心功能。
.NET Core的下载地址:
https://dotnet.microsoft.com/download
Visual Studio 2019(2017)自带的.NET Core版本是2.1,因为我们会尝试2.2版本以后才支持的publish mode:Framework-dependent executable。所以还是推荐升级到最新版。
注意VS2017需要下载下图这个兼容性2.2版本。

准备就绪之后,开始创建第一个.NET Core的Console APP。说实话整个过程和.NET Framework没有任何区别。
不修改任何一行代码,即可点击F5运行,会在控制台中输出Hello World。
然后让我们试一下publish功能。如下图在project文件上右键选择publish。

采用默认的配置,一路Next下去。会在Release文件夹下面生成一个publish文件夹,其中包含了我们Console APP的发布用版本

打开这个文件夹仔细一看,发现木的exe文件,莫不是我眼花了??这特么怎么运行??刚开始把老纸尿都吓出来了。后来发现这是因为.NET Core 2.x版本的默认发布方式都是Framework-dependent deployment(具体3种发布方式我们稍后讨论)。意思就是需要通过dotnet CLI来运行程序,可以理解为需要通过cmd命令行窗口来启动程序。而dotnet CLI可以通过安装.NET Core Runtime来获得(当然你装完整的.NET Core SDK也可以)。
让我们打开cmd窗口,通过cd命令进入到publish的目录。然后键入dotnet dotnetcorehelloworld.dll。我现在很后悔刚才起了这么长一个名字,还好Windows下不区分大小写。然后可以在控制台窗口中看到hello world的输出了。和通过F5 Debug是一样的。

Windows下的准备工作已经完成了。接下来我们试着将这个Console APP在Ubuntu下运行。
首先请大家拿出Ubuntu的机器,什么没有??要不要来戴尔买一台?
开个玩笑,我们穷逼虽然什么都买不起,但是最懂生活,没有Ubuntu我们可以5分钟之内在Windows上装一个。
此时此刻,我突然感觉某软那个CEO有点意思,什么“予力全球每一人、每一组织,成就不凡。”。让我们来体验下某软怎么帮我们学习Linux的。
打开MS Store搜索Ubuntu,第一个大图点开闭着眼睛装呗,安装过程非常迅速。

安装完成了先别急着点,要去控制面板的Windows Features里勾选Windows Subsystem for Linux。
找不到的同学直接任务栏搜索或者问Cortana。

完成以上两步之后,就可以点击打开橘色的Ubuntu了,第一次打开会有个短暂的配置过程,然后要求你输入用户名和密码,和Windows的是独立的。我们只是简单学习使用,所以随便起个好记的名字和密码就可以了。
打开Ubuntu的控制台界面后,我们希望能访问C盘,键入cd /mnt/c。然后再键入ls,就能看到C盘的文件了,当然有一些在Linux环境下是访问不了的。

为了简单起见,我们切回Windows界面,将publish文件夹拷贝到C盘根目录。然后只需要cd publish就可以找到我们的程序了。

非常遗憾我们还不能通过dotnet命令运行程序,因为我们根本就没在Linux环境下安装.NET Core的runtime啊!没有图形环境的话,只能敲命令行安装了,参考下面的链接:
https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial/install
记得选Ubuntu 18.04,之后只管一通乱敲。不放心的话可以通过这个Linux命令确认Ubutu版本:lsb_release -a
完成这步安装后,只要简单的键入dotnet DotNetCoreHelloWorld.dll就可以运行程序了。注意Linux下区分大小写。现在知道为什么要把publish拷出来了吧,不然cd目录累死人。

至此大功告成!感谢各位看到这里,想必各位还有很多疑问,我们后面再接着讨论。
这个Hello World工程我就不上传Github了。各位自己实验吧,如果怀疑Windows subsystem for Linux的真实性,那么就来戴尔买个Ubuntu的机器^O^
.NET Core学习笔记(1)——在Linux下运行Console APP的更多相关文章
- Docker学习笔记二(linux下安装Docker)
Docker学习笔记二(linux下安装Docker) 1.在线安装linux Docker 这种方式首先要保证linux 环境下可以上网,当然,小编是在自己的电脑上安装了虚拟机,在虚拟机上安装了,l ...
- boost.asio学习笔记一、linux下boost库的安装
欢迎转载,转载请注明原文地址:http://blog.csdn.net/majianfei1023/article/details/46761029 学习开源库第一步就是编译安装好库,然后执行成功一个 ...
- linux学习笔记2:linux 下java开发的软件安装
一.java ee开发环境的搭建 1.jdk的安装步骤 (1)首先必须要有安装文件,具体的可以去相关网站上下载,并制作iso文件 (2)将制作的iso文件挂载到linux系统上,并在虚拟机上将iso文 ...
- OpenCV2学习笔记01:Linux下OpenCV开发环境的搭建
个人已经厌倦了Windows下的开发方式,于是决定转到Linux平台上来,当然我也知道这个转变会很艰辛,但是我还是要坚持.所以,后面的所有开发我都会基于Linux和Qt,先从开发环境的搭建开始做起,当 ...
- Linux学习笔记01:Linux下的drwxr-xr-x
1. drwxr-xr-x 第1字母:表示文件类型 d ------- 表示文件目录(directory) - ------- 表示二进制文件 l ------ ...
- .NET CORE学习笔记系列(2)——依赖注入[7]: .NET Core DI框架[服务注册]
原文https://www.cnblogs.com/artech/p/net-core-di-07.html 包含服务注册信息的IServiceCollection对象最终被用来创建作为DI容器的IS ...
- .NET CORE学习笔记系列(2)——依赖注入[6]: .NET Core DI框架[编程体验]
原文https://www.cnblogs.com/artech/p/net-core-di-06.html 毫不夸张地说,整个ASP.NET Core框架是建立在一个依赖注入框架之上的,它在应用启动 ...
- .NET CORE学习笔记系列(2)——依赖注入[5]: 创建一个简易版的DI框架[下篇]
为了让读者朋友们能够对.NET Core DI框架的实现原理具有一个深刻而认识,我们采用与之类似的设计构架了一个名为Cat的DI框架.在上篇中我们介绍了Cat的基本编程模式,接下来我们就来聊聊Cat的 ...
- .NET CORE学习笔记系列(2)——依赖注入[4]: 创建一个简易版的DI框架[上篇]
原文https://www.cnblogs.com/artech/p/net-core-di-04.html 本系列文章旨在剖析.NET Core的依赖注入框架的实现原理,到目前为止我们通过三篇文章从 ...
随机推荐
- [WPF]获取控件间的相对位置
原文:[WPF]获取控件间的相对位置 [WPF]获取控件间的相对位置 周银辉 我们知道WPF有着比较灵活的布局方式,关于某个控件的坐标,Canv ...
- ztree的树形结构不能正常显示原因
1.ztree树形结构不能正常显示情况如下: 2.原因之一:未给其类添加 ztree 原因二:未引用ztree的css样式 <link href="~/Content/CSS/zTre ...
- Qt在Windows上的调试器CDB安装与配置
如果安装Qt时使用的是Visual Studio的预编译版,那么很有可能就会缺少调试器(Debugger),而使用MSVC的Qt对应的原生调试器是CDB(对应MinGW的Qt使用GDB调试器).本文介 ...
- 天气预报API接口
原文:天气预报API接口 一.中央气象台API接口: 1. XML接口 http://flash.weather.com.cn/wmaps/xml/china.xml 这个是全国天气的根节点,列出所有 ...
- EF CodeFirst数据迁移与防数据库删除
1 开启migrations功能 enable-migrations -force 2 添加迁移版本 add-migration 名称后缀 我们每次修改实体后,都应该使用这个add-migration ...
- 网站运行编译器错误CS1617: 选项“6”对 /langversion 无效;必须是 ISO-1、ISO-2、3、4、5 或 Default
运行winform程序时提示, CS1617: 选项“6”对 /langversion 无效:必须是 ISO-1.ISO-2.3.4.5 或 Default 找到网站的web.config配置文件,找 ...
- 使用 acl_cpp 的 HttpServlet 类及服务器框架编写WEB服务器程序(系列文章)
在 <用C++实现类似于JAVA HttpServlet 的编程接口 > 文章中讲了如何用 HttpServlet 等相关类编写 CGI 程序,于是有网友提出了 CGI 程序低效性,不错, ...
- 【canvas】blackboard 黑板
本来想的挺复杂实际操作了一下15分钟完成了,挺简单的. 预览地址:http://dtdxrk.github.io/game/blackboard/index.html 分享一下思路: 1.创建画布 2 ...
- 解释为什么.net 第一次请求比较慢
通过这个图可以很好的解释为什么第一次请求比较慢,为了提高访问速度,也便有了预编译. 关于ASP.NET网站:每个页面都编译成一个.dll文件 用Assembly.GetExecutingAssembl ...
- hgoi#20190514
T1-Curriculum Vitae 给你一个长度为n的01序列a,删去其中的几个数,使得序列中左边是连续的0,右边是连续的1,可以没有0或1,求最多剩下几个数 解法 对于每个点看它左边几个0,右边 ...