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

如果想体验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)”。

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

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

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

作为主系统的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被成功安装。

三、利用命令行创建一个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命令,它也具有相同的目录结构和文件内容。

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏晓晨的专栏

CentOS 7 安装.NET Core 2.0

1113
来自专栏Porschev[钟慰]的专栏

.NET4.0下网站应用程序用UrlRewriter.dll重写无后缀路径 (在IIS7.5中的配置方法)

接上一篇  .NET4.0下网站应用程序用UrlRewriter.dll重写无后缀路径 在IIS中新建网站(端口号8111)       直接运行http://...

2159
来自专栏Rovo89

给Sublime Text 3添加终端支持

1022
来自专栏林德熙的博客

Visual Studio 自定义项目模板

经常需要新建一个项目,项目有很多重复的东西,如然后新建View文件夹,ViewModel文件夹,Model文件夹,还有把我们的ViewModelBase放入Vi...

1791
来自专栏Crossin的编程教室

Python 相关下载

常有同学反映 Python 官网打不开、网速慢,或者不知道下载哪一个安装包。因此帮大家下载好了目前常用的几个版本,上传了百度网盘,并根据平台和版本分类放置。顺便...

3976
来自专栏维C果糖

详述 Sublime Text 打开 GBK 格式乱码的解决方法

  Sublime Text 是一个代码编辑器,其具有漂亮的用户界面和强大的功能,例如代码缩略图,Python 的插件,代码段等。还可自定义键绑定,菜单和工具栏...

5189
来自专栏布尔

js用于树型结构级联选择 支持三态级联选择

<html> <head> <meta http-equiv="Content-Type" content="text/html; chars...

3199
来自专栏Porschev[钟慰]的专栏

.NET4.0下网站应用程序用UrlRewriter.dll重写无后缀路径 (在IIS7.5中的配置方法)

接上一篇  .NET4.0下网站应用程序用UrlRewriter.dll重写无后缀路径 在IIS中新建网站(端口号8111)       直接运行http://...

2018
来自专栏张善友的专栏

通过Jexus 部署 dotnetcore版本MusicStore 示例程序

ASPNET Music Store application 是一个展示最新的.NET 平台(包括.NET Core/Mono等)上使用MVC 和Entity...

2006
来自专栏河湾欢儿的专栏

npm

Npm: Node Package management node包管理工具; npm :Npm -v ------npm install 模块名称 ...

1771

扫码关注云+社区