目录
Visual Studio Code不是Visual Studio
背景
大约一年前,我建造了一台新的台式计算机,并安装了Win10和Ubuntu作为双启动计算机。
我很快迷上了Ubuntu和Linux。我已经有8个月没有在这台机器上启动Win10了。
自Win 3.1以来,我一直在Windows系统上运行和开发,因此这很重要。但是,我真的很喜欢Microsoft的开发环境和工作方式。当我最近发现自己可以编写在Windows和Linux上都可以运行的C#代码时,我感到非常兴奋。在Windows上编写代码,然后将其引入并在Linux上构建和运行它而无需做任何更改,这真是太神奇了。不,您仍然无法在Linux上构建Windows Form应用程序,但是看看其他的。在不需要Windows窗体或图形用户界面的情况下,还可以做很多其他事情。这就是为什么我决定写这本书的原因。我只想看看仅使用Visual Studio Code和.NET Core SDK可以做什么。
我希望实现的目标
我只是想写一本可访问(任何人都可以编码)的有趣的书,它使我和我的读者对使用.NET Core在Linux平台上可以做的事情有所了解。我希望它甚至可以追溯到K&R C-尽管我的肯定不会像那个伟大的小资源那样清晰和直接。最后,我希望我能提供一些有关Linux上的.NET和C#的入门知识,以激发读者从开发中获得乐趣。
介绍
这本书的封面是什么?
本书侧重于使用Visual Studio Code和Linux命令行基于DotNet Core 3.x创建和构建项目和应用程序。
所有程序都将用C#编写。当然,基于Web的项目可能包括TypeScript、JavaScript、CSS、HTML等。
这本书是给谁的?
本书非常快速地介绍了使用DotNet Core进行Linux编程。如果您是一个勇敢的初学者,则可以使用该书开始使用C#和DotNet Core 3.x库在Linux(我运行Ubuntu)上学习和编写软件。
我将尽我所能介绍资料,即使您是初学者,也可以按照以下步骤开始学习。但是,我可能会在某些话题上讲得很快,而你可能需要其他资源来在某些主题上获得更深入的了解。
本书的主要读者是具有一定开发经验的人。如果您已经进行了至少三到六个月的编码,并且喜欢编程,那么您会在这里做的很好。如果您有更多的经验,我相信您会发现这是对可以使用DotNet Core 3.x和相关技术在Linux上创建的各种事物的不错的介绍。
以应用为中心
我将提供涉及的所有主题的示例代码,但不仅限于示例代码。我们将通过至少三个完整的实用程序(通常是基于控制台的——文本用户界面TUI),以及一些适当的Web应用程序进行工作。
我不会关注用户界面问题。本书更多是关于代码的,而很少涉及用户界面(UI)。但是,我喜欢创建尽可能易于使用的应用程序,以便在适当和适用的地方,我将讨论如何创建良好的用户体验(UX),尽管图形UI可能并不总是如此。并且,当它是图形UI时,它可能是基于Web的UI。
这本书不是什么
再次,这本书是关于使用dotnet命令行和Visual Studio Code学习在Linux环境中编程的。它是关于学习编码的,仅略微强调如何创建用户界面。如果您正在寻找创建WinForm应用程序的Linux版本,这并不是。
这本书是什么
但是,如果您有兴趣学习dotnet Core,C#,编写实用程序并了解有关Linux基础的更多信息,那么这里就是您的理想选择。
我真的认为这本书是一个业余爱好者在学习通过Linux运行的DotNet Core编程。它应该很有趣...但是我是一个极客。:)
GitHub上的所有源代码
我将在GitHub存储库(repo)中提供所有代码,并且所有代码都是开源的,可免费用于您自己的项目中。
DotNet Core
dotnet命令行(基于控制台)应用程序非常出色,并且非常易于使用。如果您是Linux用户,则可能还是习惯于使用命令行。本书将重点介绍使用dotnet控制台应用程序来做我们能做的所有事情。这包括创建项目,从源文件编译和构建,添加库以及其他所有内容。
那应该使您对本书的工作方式和学习内容有所了解。现在,让我们开始安装dotnet core,Visual Studio Code并编写我们的第一个控制台应用程序。
MacOS奖金
我也在MacMini上测试了这些程序。您可以安装Visual Studio Code,.NET Core SDK和.NET Core运行时,并在终端窗口中运行所有内容,即使Mac默认情况下运行zsh(shell)也是如此。
无论您运行的是Mac还是Linux,本书中遵循的命令都是相同的。仅供参考——安装Visual Studio Code和.NET SDK等时可能会有一些差异,但是这些差异足够容易,您可以找出它们。
第2章——进入.NET Core
- Linux终端(命令行)
- 安装.Net Core 3 SDK和运行时
- 安装Visual Studio Code
- 构建并运行我们的第一个控制台(终端)程序
Linux终端
我们要做的第一件事是打开一个终端,检查是否安装了dotnet。
如果在Linux机器上找不到终端,并且正在运行Gnome桌面(例如我在Ubuntu上),则可以单击“活动”菜单(有点像Win10的“开始”按钮),然后键入:terminal。
最后,只需单击“终端”图标,它将为您打开。
测试dotnet可执行性
出现命令提示符后,键入以下内容,然后按<ENTER>。
dotnet --version
如果您在尚未安装dotnet sdk的系统上,那么您会得到类似我的截图内容,找不到该命令。
安装.NET Core SDK
让我们安装dotnet。
打开您喜欢的Web浏览器(我的FireFox),然后转到:https://dotnet.microsoft.com/download。
您会看到类似以下内容:
继续并单击[Install .NET Core]按钮。
这将带您进入一个很长的页面,其中列出了可以在其上安装.NET Core的所有各种Linux发行版(在本书中,我可能会更改对dotnet core的引用方式)。
我运行Ubuntu 18.04和Debian 10
我实际上正在将Ubuntu 18.04 Desktop作为主机运行。但是,您可能会注意到我遵循的是Debian安装。那是因为我在一个VirtualBox实例中运行Debian(带有Gnome桌面),所以我可以指导您完成所有新的安装工作。经过测试后,我确定在Ubuntu 18.04和Debian 10上安装的命令完全相同,因此它们是可互换的。这是因为Ubuntu基于Debian。
Ubuntu 18.04或Debian 10
这是开始在Ubuntu 18.04上安装所需的第一步:
复制以下内容,将其粘贴到终端中,然后按<ENTER>键,它将开始运行。
wget https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb
-O packages-microsoft-prod.deb
完成后,复制下一行并将其粘贴到终端窗口中,然后按<ENTER>。
sudo dpkg -i packages-microsoft-prod.deb
您可以看到第一个命令已运行,现在终端正在等待我按下<ENTER>以启动第二个命令:
我实际上在运行dpkg命令时忘记添加sudo,然后出现错误。但是,这里是我在sudo下再次运行它时发生的事情。
键入密码后,我看到以下内容:
它提到了sudoers文件,该文件包含一个允许提升为超级用户状态的用户名。
Linux Sudo(超级用户)
这很重要,因为这本书也是关于学习Linux的,而且您一定会遇到这些问题。
让我们看看如何解决此问题。
键入su root并按<ENTER> 。
系统将提示您输入root密码。我希望你还记得。:)
我输入的是我的,现在您可以看到我以root用户身份登录,因为在下一个图像中,提示符具有显示已登录用户的root@debian前缀。
我们需要给我的用户帐户,raddev,sudo权限。对于您的情况,您需要赋予用户名sudo权限。
安装Sudo
为此,您可能需要像我一样安装sudo。
输入以下内容,然后按<ENTER>。
apt-get install sudo -y
将用户添加到Sudo文件
现在,您可以将用户添加到sudo文件。
输入以下内容,然后再次按<ENTER>。
sudo adduser raddev sudo
退出Root
现在,让我们从root用户退出。为此,请键入:
exit
然后按<ENTER>键。
您将重新使用您的用户帐户。现在,让我们尝试再次安装dotnet core sdk。
注销/登录
我的,没用工作。我再次尝试,发现您需要注销并重新登录(或重新启动),然后您的帐户才能拥有sudo权限,因此请继续注销并重新登录。那对我有用。
登录后,继续并再次打开终端,然后再次运行以下命令:
sudo dpkg -i packages-microsoft-prod.db
我的安装是成功的。
安装.NET Core SDK
.NET Core SDK是具有所有.NET Core功能的一组库,这些功能使您可以在.NET Core中编写程序。这是Microsoft创建的一组库,这些库包装了操作系统调用以创建文件,从用户获取输入,向用户显示输出以及数千种其他内容。SDK代表软件开发套件。
这是用于构建在.NET Core之上运行的自定义程序的工具包。
当您学习如何使用.NET Core SDK编写程序时,您将学习如何在.NET Core中进行编程。
现在,我们使用以下长的多行命令安装主要的dotnet sdk:
sudo apt-get update; \
sudo apt-get install -y apt-transport-https && \
sudo apt-get update && \
sudo apt-get install -y dotnet-sdk-3.1
将其复制并粘贴到您的终端中,按<ENTER>,它将开始安装。
完成后,您将看到类似以下的内容:
.NET Core运行时
现在,我们需要安装DotNet Core运行时。.NET Core Runtime是实际将运行您编写的代码的应用程序。您将编写代码来调用.NET Core SDK中的函数,然后将代码构建为可执行文件并在.NET Runtime中运行该代码。
这是我们将在终端窗口中运行的命令:
sudo apt-get update; \
sudo apt-get install -y apt-transport-https && \
sudo apt-get update && \
sudo apt-get install -y aspnetcore-runtime-3.1
结果如下:
一切都已安装
这就是dotnet Core sdk和运行时所需的一切。让我们检查一下,看看有什么。
$ Prompt :Linux终端
现在,我将仅向您显示$提示,然后输入您要输入的命令。
这样,我就不用再说了,输入<ENTER>。
它看起来像:
$命令的命令选项
$ ls -al
每当您看到该命令时,请按照显示的命令运行。当然,要在终端中提交任何命令,您必须按<ENTER>。
Dotnet 是可执行的
现在已经安装了.NET Core,我们可以运行dotnet命令。
如果我们将--version传递给dotnet命令,它将使我们知道安装了哪个版本。
转到终端并输入:
$ dotnet --version
注意:请记住,这些命令区分大小写,因此您需要完全按此处显示的方式键入它们。
我们将在许多方面使用dotnet,因此我们将在其中看到更多信息。我们将使用它来创建我们的项目,构建代码,运行我们的应用程序等等。但是,现在,我们需要一个代码编辑器。
我们需要一个代码编辑器
我们正在开发第一个应用程序。但是,我们需要一个使编写代码更容易的编辑器。当然,本书中使用的编辑器是免费提供的Visual Studio Code。
Visual Studio Code不是Visual Studio
请记住,Visual Studio Code是轻量级的编辑器(与Visual Studio相比)。
Visual Studio实际上不会在Linux上运行。有Mac版本的Visual Studio,但没有Linux版本。但这很好,因为Visual Studio Code是出色的编辑器,并且非常接近完整的IDE(集成开发环境)。
Visual Studio Code并没有Visual Studio拥有的所有项目模板和所有工具,但是我相信,一旦运行它,您会感到惊讶。
我们最终将学习如何添加调试器插件,使我们可以逐步完成代码。
安装Visual Studio Code(VSC)
要了解有关VSC的更多信息,只需将您喜欢的浏览器指向:https://code.visualstudio.com
但是,有一种比从站点下载Debian软件包更好的安装Visual Studio Code的方法。我将引导您完成在Linux上安装Visual Studio Code的最流畅、最佳方法。
是的,这是更多终端安装。运行以下命令:
$ sudo apt update
接下来,运行此命令:
$ sudo apt install software-properties-common apt-transport-https curl
它将确认您要安装软件包。键入y,然后按<回车>
现在,我们使用curl导入获取Microsoft应用程序所需的Microsoft GPG密钥(安全密钥)。
必须将Visual Studio Code存储库添加到我们的系统中,以便可以安装它。
注意:以下命令很长,以至于可以换行到下一行,但是该行中没有回车符。
$ sudo add-apt-repository "deb [arch=amd64]
https://packages.microsoft.com/repos/vscode stable main"
没有输出,它仅安装存储库并返回到提示。
运行以下命令:
$ sudo apt update
您可以看到新的Microsoft存储库列表已被读入。
运行Visual Studio Code的安装
现在,我们终于可以安装Visual Studio Code。
$ sudo apt install code
Visual Studio Code安装完成
Visual Studio Code已正式安装。
让我们开始吧。
单击活动,然后在搜索栏中键入“Visual”。您将看到Visual Studio Code图标。
单击该图标,Visual Studio Code将启动。
若要学习如何使用Visual Studio Code(VSC),我们需要创建一个项目,以便我们可以开始研究Visual Studio Code的许多功能。
创建一个新项目
让我们切换回终端窗口,并使用dotnet命令行工具创建一个项目。
设置目录
让我们花一点时间讨论如何设置目录以组织开发工作。
在主目录中,创建一个名为dev的目录。
在该目录下,我将拥有以我正在使用的各种技术类型命名的目录,例如webdev,dotnet,C ++等。
在本例中,我们将从主目录创建一个名为dev的目录,然后在该目录下创建一个dotnet目录。
Linux提示符显示什么
这是我在该目录中时的提示内容:
raddev@raddev-1:~/dev/dotnet$
这意味着用户raddev登录到名称为raddev-1的计算机上。
在冒号(:)之后,您可以看到当前路径,即~/dev/dotnet,最后有提示$。您键入的任何内容都会在$提示后出现。
主目录
请记住,~代表您的主目录。这意味着如果您给出命令:
$ cd ~
然后,您将被移到主目录。
但是,该目录的完整路径是/home/username,其中username是您的用户名。
打印工作目录(pwd)
如果您想查看所在目录的完整路径,可以发出以下pwd命令:
$ pwd
正如你所看到的,我做了更改目录(cd)到home ~然后我做了一个PWD,现在我在目录/home/raddev中。
现在,您将更好地了解Linux文件系统中的位置。
我在主目录下创建了一个dev目录。在dev目录下,我创建了一个dotnet目录。我将使用以下命令从home中移回目录:
$cd dev/dotnet
创建目录(mkdir)
您可以复制/粘贴下面的命令并立即运行它,然后您将拥有与我相同的目录结构。
$ mkdir -p ~/dev/dotnet
这将在您的home目录下创建dev目录,并在dev目录下创建dotnet目录。
-p参数创建可能不存在的任何父目录(dev)。
主(Home)目录 (~) 确实有帮助
~代表您的主目录/home/username非常酷,因为我不必知道您的用户名即可为您提供良好的mkdir命令。相反,我们只使用~来指代路径的那部分。
运行命令后,继续并将目录更改为目录。
$ cd ~/dev/dotnet
进入目录后,您将知道自己所在的位置,因为您会在$提示符之前看到路径。
我们准备创建一个新的dotnet项目。
我们将创建一个基于控制台(终端)的简单程序。这很容易做到。
我们要做的就是告诉dotnet两件事:
- 我们要创建什么类型的项目(控制台)
- 我们必须告诉它项目的类型,因为您将看到,您可以使用dotnet命令创建许多不同类型的.NET项目。
- 我们要为新项目命名的名称。
dotnet new
确保您位于正确的文件夹(~/dev/dotnet/)中。继续运行命令:
$dotnet new console -o FirstConsole
文件夹中的文件夹
在DOTNET命令中的-o告诉DOTNET项目的输出名称。这将在您当前所在的文件夹中创建一个新文件夹。这就是为什么要位于~/dev/dotnet文件夹中。创建项目后,您将拥有一个新文件夹~/deve/dotnet/FirstConsole/,该文件夹内将是dotnet命令创建的所有项目文件。
将目录更改为新的项目目录:
$ cd FirstConsole
列出目录(lsl):
$ ls -al
此项目中只有一个源文件(Program.cs)。另一个文件是项目文件。
我们现在可以构建程序。
$ dotnet build
该程序成功编译并生成,因为我们没有收到任何警告或错误。
现在,我们可以运行该程序了。
$ dotnet run
就是这样。仅一行输出。
顺便说一句,当您给出一个命令时,dotnet将为您构建并运行该应用程序:
$ dotnet run
这样,如果您只想运行该应用程序但已进行了更改,则只需给出一个命令,然后dotnet会为您完成所有工作。
Visual Studio Code
让我们在Visual Studio Code中打开该项目,并查看源代码以结束第一章。
如果VSC没有打开,请继续打开它。
您会在VSC中看到正常的起始页。
转到[文件]菜单,然后选择[打开文件夹...]菜单项。
选择菜单项后,将打开文件浏览器应用程序。
您将单击左侧的[主页],然后向下导航至dev/dotnet/,然后选择dotnet为您的项目创建的FirstConsole文件夹。
单击FirstConsole文件夹后,然后单击右上角的[确定]按钮。
Visual Studio Code将加载文件夹和文件,并将它们显示在左侧的文件视图中。
您会看到VSC标题栏包含项目的名称(FirstConsole)。
并且,在左侧,有七个图标(顶部为5,底部为2),可用于导航至其他VSC功能。
当前选择了文件视图图标。
放大镜是搜索功能。
三节点形状允许您访问版本控制软件Git。这使您可以跟踪源代码中的更改。
带有三角形的错误使您可以访问调试器。
带四个块的图标使您可以访问有助于扩展VSC功能的插件。其中之一对于使用至关重要,因为它将提供Intellisense功能(代码完成和信息),并允许我们逐行调试和逐步执行C#代码。
圆人图标可让您登录到Microsoft开发人员帐户。
最后,使用该工具可以访问VSC配置项,并检查更新和更多内容。
现在没有打开的文件,但是让我们继续,在文件导航器中单击Program.cs文件,以便我们可以编辑一些代码。
安装插件
当您单击该项目时,您将看到代码显示在右侧,而小的弹出对话框将出现在VSC的右侧。
VSC知道您打开了C#文件,因此它试图通过让您知道要安装C#插件来提供帮助,该插件将为您提供更多功能。继续并单击[安装]按钮。
完成后,它将开始安装。
请注意,现已选择插件图标(突出显示的白色)。您可以看到已安装了Linux版OmniSharp软件包(x64)。
再次单击文件浏览器图标(顶部图标),以便您可以再次看到C# Program.cs文件。
选择左侧的Program.cs文件,以便该文件在编辑器中打开。
让我们改变输出到控制台(终端)的文本,这样就不只是“Hello World!”,用户将看到“Hello, Linux-World!”。
您所要做的就是单击文件内部,然后在双引号之间键入该代码。
Console.WriteLine("Hello, Linux-World!");
带数字的小蓝色圆圈
您可能会在左上方的文档图标顶部看到一个带有数字的蓝色小圆圈。这表明该文件已更改但尚未保存。
继续并保存文件(CTRL + s),蓝色圆圈将消失。显然,要在运行程序时看到对源代码所做的更改,必须将它们保存到文件中。
转回您的终端。您仍应位于~/dev/dotnet/FirstConsole目录中。
运行以下命令,您将看到所做的更改。请记住,执行run命令时,如果发生更改,您还告诉dotnet构建源代码。
$ dotnet run
这个程序是如何运行的?
基本代码仅定义Main()方法或函数。这被认为是应用程序的入口点。那只是意味着一切开始。
这意味着当您告诉dotnet构建应用程序时,它会设置一些内部内容,以便操作系统知道从何处启动程序。
该程序启动时,只有一个命令可以运行(Console.WriteLine)。
System.Console库
该命令实际上是C#开发人员编写的函数。实际的函数名称是WriteLine,但他们将函数放在名为Console的库中。他们这样做是为了组织职能。实际上,库的全名是System.Console。
之所以看不到该System名称的一部分,是因为它已经添加到Program.cs文件的顶部(using System;),因此您不必每次都键入它。
像盒子一样的库
您可以将这些库视为盒子。当您要运行特定功能时,需要转到正确的盒子并在其中查看。某些盒子(库)中还有其他盒子。
在我们的例子中,我们查看了系统库(盒子)内部,找到了控制台库,然后在其中找到了一个名为WriteLine()的方法或函数,该方法或函数知道如何将消息输出到终端(控制台)窗口。
您可以查找此库并在Microsoft的开发人员网站上正常运行。它看起来像以下内容:
https://docs.microsoft.com/zh-cn/dotnet/api/system.console.writeline?view=netcore-3.1
注意,在左侧,您可以看到已选择该WriteLine方法,而在右侧,我们看到了说明该方法的主文档。
从顶部开始,我们看到名称Console.WriteLine,接下来是系统的命名空间(库或框)。我们接下来看到的是Assembly:System.Console.dll。这是我们安装的.NET Core SDK一部分的实际文件。这是一个特殊的文件,其中包含我们从程序中调用的功能(方法)。DLL代表动态链接库。这是一种幻想的表达方式,您可以根据需要(动态)将此特殊库链接到您的程序中,以便拥有Microsoft开发人员为您使用而创建的功能。
最后,在“重载”部分(这意味着有很多方法可以调用该WriteLine方法)下,我们看到了第二个选项WriteLine(String)和一个定义(以灰色突出显示)。
这是我们正在使用的WriteLine()方法的形式。我们给它传递一个String(用双引号引起的一个或多个字符表示一种String类型)。
当我们传递String时,它将其写入标准输出流(终端)。
在本书中,我们将介绍更多细节。现在,这是对第一个基本程序中正在发生的事情的很好的坚实理解。
总结
这是对编程领域和Linux领域的长期介绍。您已经学到了很多,现在您已经了解了:
- 如何使用Visual Studio Code
- 如何在Linux文件系统中移动
- 如何建立目录
- 如何使用dotnet命令创建、构建和运行项目
- 一个简单的控制台应用程序的功能及其如何执行的基础知识
请阅读下一篇的 使用.NET Core 3进行Linux编程:第3章 。