.NET Core多平台开发体验[3]: Linux (Windows Linux子系统)

时间:2022-09-23 16:25:43

如果想体验Linux环境下开发和运行.NET Core应用,我们有多种选择。一种就是在一台物理机上安装原生的Linux,我们可以根据自身的喜好选择某种Linux Distribution,目前来说像RHEL、Ubuntu、Debian、Fedora、CentOS和SUSE这些主流的Distribution都是支持的。如果读者朋友们觉得这种方式比较麻烦,我们也可以采用虚拟机的形式安装相应的Linux Distribution,比如我经常使用的都是安装在VirtualBox上的Ubuntu。对于64为Windows 10的用户来说,我们有了第三种选择,那就是Windows 10提供的Linux子系统(WSL: Windows Subsystem for Linux),接下来我们就来演示在WSL上运行.NET Core应用。

一、启用Linux子系统

接下来我们来简单介绍一下如何启用Linux子系统。首选需要提醒读者朋友们的是:只有64位的Windows 10周年纪念版本才提供对Linux子系统的支持,如果你的Windows 10版本比较老,你需要将它升级到较新的版本。在这之后,我们需要开启系统的开发者模式(Developer Mode),对此我们只需要选择“设置(Settings)”>“更新与安全(Update and Security)”打开如下这个对话框。我们只需在左侧选择“针对开发人员(For developers)”,并在右侧提供的三个选项中选择“开发者模式(Developer Model)”。

.NET Core多平台开发体验[3]: Linux (Windows Linux子系统)

系统的开发者模式被启用之后,我们需要通过“控制面板(Control Panel)”>“程序与功能(Programs and Features)”打开如下图所示的“程序与功能”对话框,并选择“启用或关闭Windows功能(Turn Windows features on or off)”打开“Windows功能”对话框。当我们勾选“适用于Linux的Windows子系统(Windows Subsytem for Linux”)选项并重启后,针对Linux的Windows子系统特性被正式启用。

.NET Core多平台开发体验[3]: Linux (Windows Linux子系统)

当针对Linux的Windows子系统特性其中之后,系统赋予了我们一个名为lxrun的命令来管理这个子系统,我们可以利用它来安装、卸载和更新Linux系统。到目前为止,我们仅仅是开启了Linux子系统这个Windows特性,并没有一个具体的Linux Distribution被安装,所以我们现在需要做的就是以如下图所示的形式执行“lxrun /install”命令安装一个具体的Linux Distribution,该命令目前为我们安装的是Ubuntu。Linux子系统完成之后,我们只需要制定用户名和密码创建一个登录账号即可。

.NET Core多平台开发体验[3]: Linux (Windows Linux子系统)

当Linux被成功安装之后,我们可以在CMD命令行中执行bash命令进入Linux Bash Shell。如下图所示,我们在CMD命令行中执行bash命令之后会自动进入Linux Bash Shell。我们在Bash Shell中执行lsb_release -a命令输出当前安装的Linux Distribution的版本信息。如果想恢复到CMD命令行模式,我们只需要执行exit命令退出Bash Shell即可。

.NET Core多平台开发体验[3]: Linux (Windows Linux子系统)

作为主系统的Windows和Linux子系统可以共享网络系统和文件系统。Windows下的文件系统直接挂载到“/mnt”目录下,所以Windows下的文件或者目录路径加上行“/mnt”前缀就变成了基于Linux子系统下的路径。如图1-25所示,CMD命令行环境下的当前工作目录为“c:\users\jinnan”,当我们切换到Bash Shell后,当前工作目录其实并没有发生变化,只是路径变成了“/mnt/c/users/jinnan”而已。

二、安装开发环境

如果我们想在Linux下运行.NET Core应用,我们也只需要安装.NET Core SDK就可以了。针对不同的Linux Distribution,.NET Core SDK的安装略有不同。对于主流的Linux发行版本(RHEL、Ubuntu、Debian、Fedora、CentOS和SUSE等), .NET Core的官方站点上给出了安装.NET Core SDK的详细教程,在这里我们针对WSL的版本(Ubuntu 16.04.2 )简单介绍一下如何安装对应的SDK。

对于Ubuntu下安装.NET Core SDK,我们只需要执行apt-get安装对应的deb包就可以了,不过在这之前我们需要确保该包所在Feed的URL在本地被注册。至于该Feed URL的注册,则主要涉及到两个步骤,第一个步骤是注册用于检验deb包完整性的签名密钥(Signature Key)文件,该密钥编码后的内容(ASCII Armor)可以直接从地址“https://packages.microsoft.com/keys/microsoft.asc”下载。为了在本地注册该密钥文件,我们执行如下的命令下载该文件并执行“gpg --dearmor”将文本内容转换成二进制保存在文件“microsoft.gpg”,最终将后者保存到受信任密钥目录“/etc/apt/trusted.gpg.d”下。

~$ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
~$ sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg

完成针对签名密钥文件的注册之后,我们可以执行如下命令将在表示deb包源的“/etc/apt/sources.list.d”目录下创建一个dotnetdev.list文件,.NET Core SDK所在deb包对应的Feed URL(https://packages.microsoft.com/repos/microsoft-ubuntu-xenial-prod)就包含在这个文件中。在这之后微软通过该Feed提供的所有的deb包都可以直接通过apt-get命令安装。

~$ sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-xenial-prod xenial main" > /etc/apt/sources.list.d/dotnetdev.list'

当所在deb包的Feed被成功注册并通过执行apt-get update命令作相应同步操作之后,我们就可以按照如下的方式执行apt-get install命令安装.NET Core SDK了。值得一提的时候,如果你在本地曾经安装过之前的版本,你最好先将它们卸载。

~$ sudo apt-get update
~$ sudo apt-get install dotnet-sdk-2.0.0

安装完成之后,我们可以执行dotnet –info命令查看当前.NET Core SDK的基本信息,如果得到如下图所示的输出结果,那就证明.NET Core SDK被成功安装。

.NET Core多平台开发体验[3]: Linux (Windows Linux子系统)

三、利用命令行创建一个ASP.NET Core MVC应用

.NET Core SDK同样为Linux提供了dotnet这个重要的命令行工具,意味着这我们同样可以利用它提供的脚手架模板创建相应的.NET Core应用。这次我们直接创建一个ASP.NET Core MVC,为此我们在执行dotnet new命令得时候将模板名称指定为“mvc”。如下图所示,我们在执行dotnet new命令时的当前工作目录为“/mnt/c/”,也就是主系统Windows下的“c:\”,所以创建出来的ASP .NET Core MVC应用所在的根目录为“c:\helloworld”,我们列了该目录下的所有文件和子目录。如果我们在Windows下执行相同的命令创建一个ASP.NET Core MVC命令,它也具有相同的目录结构和文件内容。

.NET Core多平台开发体验[3]: Linux (Windows Linux子系统)

和在Windows和Mac OS X下利用脚手架命令创建的应用一样,我们在Linux下同样可以在无需对它们作任何更改的情况下直接运行它们,为此我们只需要在当前应用所在的目录下执行dotnet run命令即可。如下图所示,启动后的ASP .NET Core MVC应用默认会绑定在5000端口进行请求监听,由于Linux是当前Windows的子系统而非虚拟机,所以主子系统可以共享网络,因此我们利用浏览器请求地址“http://localhost:5000”可以访问这个应用的主页。

.NET Core多平台开发体验[3]: Linux (Windows Linux子系统)

.NET Core多平台开发体验

.NET Core多平台开发体验[1]: Windows
.NET Core多平台开发体验[2]: Mac OS X
.NET Core多平台开发体验[3]: Linux
.NET Core多平台开发体验[4]: Docker

.NET Core多平台开发体验[3]: Linux (Windows Linux子系统)的更多相关文章

  1. .NET Core多平台开发体验[1]: Windows

    微软在千禧年推出 .NET战略,并在两年后推出第一个版本的.NET Framework和IDE(Visual Studio.NET 2002,后来改名为Visual Studio),如果你是一个资深的 ...

  2. .NET Core多平台开发体验[2]: Mac OS X

    除了微软自家的Windows平台, .NET Core针对Mac OS以及各种Linux(RHEL.Ubuntu.Debian.Fedora.CentOS和SUSE等)都提供了很好的支持,我们先来体验 ...

  3. .NET Core多平台开发体验[4]: Docker

    对于一个 .NET开发人员,你可能没有使用过Docker,但是你不可能没有听说过Docker.Docker是Github上最受欢迎的开源项目之一,它号称要成为所有云应用的基石,并把互联网升级到下一代. ...

  4. dotnet core多平台开发体验(mac os x 、windows、linux)

    前言 随着net core rc2的发布,园子里面关于net core的入门文章也也多了起来,但是大多数都是在一个平台上面来写几个简单的例子,或者是在解释代码本身,并没有体现说在一个平台上面创建一个项 ...

  5. dotnet core多平台开发体验

    前言 随着net core rc2的发布,园子里面关于net core的入门文章也也多了起来,但是大多数都是在一个平台上面来写几个简单的例子,或者是在解释代码本身,并没有体现说在一个平台上面创建一个项 ...

  6. Linux (Windows Linux子系统)

    Linux (Windows Linux子系统) 如果想体验Linux环境下开发和运行.NET Core应用,我们有多种选择.一种就是在一台物理机上安装原生的Linux,我们可以根据自身的喜好选择某种 ...

  7. NET Core全新的开发体验

    NET Core全新的开发体验 2016年6月27日,这是一个特殊的日子,微软全新的.NET开发平台.NET Core的RTM版本正式发布.我个人将.NET Core的核心特性归结为三点,它们的首字母 ...

  8. 通过几个Hello World感受.NET Core全新的开发体验

    2016年6月27日,这是一个特殊的日子,微软全新的.NET开发平台.NET Core的RTM版本正式发布.我个人将.NET Core的核心特性归结为三点,它们的首字母组成一个非常好记的简称——COM ...

  9. Android开发环境搭建 for windows (linux类似) 详细可参考“文件”中“Android开发环境搭建.pdf ”

    ADT-Bundle for Windows 是由Google Android官方提供的集成式IDE,已经包含了Eclipse,你无需再去下载Eclipse,并且里面已集成了插件,它解决了大部分新手通 ...

随机推荐

  1. mybatis框架下解决数据库中表的列的字段名和实体类属性不相同的问题

    导包.... 实体类中的属性,getter,setter,tostring,构造等方法就不写了 private int id; private String orderNo; private floa ...

  2. Maven项目

    1,创建项目,类似于创建一个VS.net 项目的 解决方案.    http://*.com/questions/6328778/how-to-create-an-empty- ...

  3. 谈layout_gravity和gravity的用法

      相信对于Android的初学者来说,大家都曾经被layout里这两个极其相似的属性迷惑过. 简单使用一下搜索工具,我们就不难找到下面这样的答案: layout_gravity 表示组件自身在父组件 ...

  4. hdu 4744 最小费用流

    #include <cstdio> #include <queue> #include <cstring> #include <cmath> #defi ...

  5. 已收录的帝国cms文章被误删除了怎么办&quest;

    我们一直提倡网站要经常备份,但是有时也会遗忘,一不小心被谁删除了那就欲哭无泪了.就像ytkah刚弄了一个站,开了个权限比较高的后台帐号给别人用,居然把两三个栏目都删除了,想发狂啊.刚好又有段时间没备份 ...

  6. &lpar;转&rpar;实战Memcached缓存系统(8)Memcached异步实时读写问题的解决方案SAC

    在使用Memcached时,一般实时读写的场景并不多见.但多是Memcached写入后,在一定时间后才会有读操作.但是如果应用场景,是写入后瞬间即会有读操作呢?似乎没有什么特别之处,我们依然可以这样写 ...

  7. Memcached总结一&colon;memcached简介及适用和不适应场景

    Memcached是免费的,开源的,高性能的,分布式内存对象的缓存系统(键/值字典),旨在通过减轻数据库负载加快动态Web应用程序的使用. Memcached是由布拉德·菲茨帕特里克(Brad Fit ...

  8. 纯javascript联动的例子

    有人想要学习下纯javascript联动的一些技巧,我这里就以日期的联动为例,附上一些代码至于复杂的省市区联动,不建议用纯javascript的,而是用ajax的方式,该不在此讨论范围内,想要了解aj ...

  9. Lambda表达式 - 浅谈

    概述: 只要有委托参数类型的地方,就可以使用 Lambda表达式.在讲述Lambda表达式之前,有必要先简要说明一下 委托中的"匿名方法": using System; using ...

  10. MFC连接ftp服务器

    CInternetSession* m_pInetSession; CFtpConnection*   m_pFtpConnection; //连接服务器的函数 BOOL CftpClientDlg: ...