都说.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^

最新文章

  1. multipart数据结构
  2. android switch(String)错误:Cannot switch on a value of type String for source level below 1.7
  3. php多进程刷票
  4. c语言二叉树
  5. js中arguments,caller,callee,apply的用法小结
  6. Sqoop导入mysql数据到Hbase
  7. JavaScript创建Map对象(转)
  8. 【DFS深搜初步】HDOJ-2952 Counting Sheep、NYOJ-27 水池数目
  9. JMeter对Selenium自动化代码进行压测
  10. Introduction to Web Services
  11. JS获取request字符串
  12. 2017-2-23 C#基础 中间变量
  13. 使用设置sa用户登录sql server2008
  14. SQL基础教程读书笔记-1
  15. Django App(二) Connect Mysql & defualt App admin
  16. 【RecyclerView优化】
  17. 课下必做MyCP
  18. 依赖注入[5]: 创建一个简易版的DI框架[下篇]
  19. 杭电1024----Max Sum Plus Plus
  20. 菜鸟脱壳之脱壳的基础知识(五)——利用内存断点寻找OEP

热门文章

  1. Node.js && Angular && TypeScript 环境安装与更新
  2. QProcess::startDetached(5.10有了一种新的方式)
  3. 通通WPF随笔(3)——艺术二维码素材生成器
  4. Java 访问修饰符详解
  5. Wow6432Node
  6. Python编写AWS Version 4 signing (AWS4-HMAC-SHA256) for execute-api
  7. Qt之自定义搜索框——QLineEdit里增加一个Layout,还不影响正常输入文字(好像是一种比较通吃的方法)
  8. windows qt 使用c++ posix接口编写多线程程序(真神奇)good
  9. PNG透明窗体全攻略(控件不透明)
  10. 关于Android开发四大组件