当您了解软件开发人员首选的操作系统时,您通常可以猜到他们使用的编程语言。如果他们使用 Windows,语言列表包括 C#、JavaScript 和 TypeScript。一些老牌开发人员可能正在使用 Visual Basic,而前沿的编码人员则在尝试 F#。即使您可以使用 Windows 开发几乎任何语言,但大多数人还是坚持使用常用的语言。
如果他们使用 Linux,您会得到一个开源项目列表:Go、Python、Ruby、Rails、Grails、Node.js、Haskell、Elixir 等。似乎随着每种新语言(Kotlin,有人吗?)的引入,Linux 都会吸引一批新的开发人员。
因此,让微软(微软?!)通过使 .NET 框架(称为 .NET Core)开源并在任何平台上运行来打破这一理论。Windows、Linux、MacOS,甚至电视操作系统:三星的 Tizen。加上微软的其他 .NET 版本,包括 Xamarin,您可以将 iOS 和 Android 操作系统添加到列表中。(真的吗?我可以在我的电视上运行 Visual Basic 应用程序?这是什么怪事?)
鉴于这种情况,Linux 开发人员是时候熟悉 .NET Core 并开始尝试,甚至构建生产应用程序了。很快您就会遇到这样的人:“我使用 Linux … 我编写 C# 应用程序。” 请做好准备:.NET 即将到来。
如何在 Linux 上安装 .NET Core
您可以运行 .NET Core 的 Linux 发行版列表包括 Red Hat Enterprise Linux (RHEL)、Ubuntu、Debian、Fedora、CentOS、Oracle 和 SUSE。
每个发行版都有自己的安装说明。例如,考虑 Fedora 26
步骤 1:添加 dotnet 产品源。
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[packages-microsoft-com-prod]\nname=packages-microsoft-com-prod \nbaseurl=https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo'
步骤 2:安装 .NET Core SDK。
sudo dnf update
sudo dnf install libunwind libicu compat-openssl10
sudo dnf install dotnet-sdk-2.0.0
创建 Hello World 控制台应用程序
现在您已经安装了 .NET Core,您可以创建无处不在的“Hello World”控制台应用程序,然后再了解有关 .NET Core 的更多信息。毕竟,您是一名开发人员:您现在就想创建并运行一些代码。这很公平;这很容易。创建一个目录,移动到该目录中,创建代码并运行它
mkdir helloworld && cd helloworld
dotnet new console
dotnet run
您将看到以下输出
$ dotnet run
Hello World!
刚刚发生了什么?
让我们分解一下刚刚发生的事情。我们知道 mkdir 和 cd 做了什么,但是之后呢?
dotnet new console
正如您无疑猜到的那样,这创建了“Hello World!”控制台应用程序。需要注意的关键事项是:项目名称与目录名称(即“helloworld”)匹配;代码是使用模板(控制台应用程序)构建的;并且项目的依赖项已由 dotnet restore 命令自动检索,该命令从 nuget.org 中拉取。
如果您查看目录,您将看到创建了这些文件
Program.cs
helloworld.csproj
Program.cs 是 C# 控制台应用程序代码。继续看看里面(您已经看过了……我知道……因为您是一名开发人员),您会看到发生了什么。这一切都非常简单。
Helloworld.csproj 是与 MSBuild 兼容的项目文件。在这种情况下,它没有太多内容。当您创建 Web 服务或网站时,项目文件将具有新的重要意义。
dotnet run
此命令执行了两件事:它构建了代码,并运行了新构建的代码。每当您调用 dotnet run 时,它都会检查 *.csproj 文件是否已更改,并运行 dotnet restore 命令。它还会检查是否任何源代码已被更改,并且将在后台运行 dotnet build 命令,该命令(您猜对了)构建可执行文件。最后,它将运行可执行文件。
差不多是这样。
我的可执行文件在哪里?
哦,它就在那里。只需运行 which dotnet,您就会看到(在 RHEL 上):
/opt/rh/rh-dotnet20/root/usr/bin/dotnet
这就是您的可执行文件。
差不多是这样。
当您创建 dotnet 应用程序时,您正在创建一个程序集……一个库……是的,您正在创建一个 DLL。如果您想查看 dotnet build 命令创建的内容,请查看 bin/Debug/netcoreapp2.0/。您将看到 helloworld.dll、一些 JSON 配置文件和一个 helloworld.pdb(调试数据库)文件。您可以查看 JSON 文件以了解它们的作用(您已经看过了……我知道……因为您是一名开发人员)。
当您运行 dotnet run 时,运行的进程是 dotnet。该进程反过来调用您的 DLL 文件,它就变成了您的应用程序。
它是可移植的
这是 .NET Core 真正开始与仅限 Windows 的 .NET Framework 不同的地方:您刚刚创建的 DLL 将在安装了 .NET Core 的任何系统上运行,无论是 Linux、Windows 还是 MacOS。它是可移植的。事实上,它实际上被称为“可移植应用程序”。
永远独立
如果您想分发应用程序,并且不想要求用户在其机器上安装 .NET Core 怎么办?(这样要求有点粗鲁,对吧?)同样,.NET Core 有答案:独立应用程序。
创建独立应用程序意味着您可以将应用程序分发到任何系统,它都可以运行,而无需安装 .NET Core。这意味着更快更简单的安装。这也意味着您可以在同一系统上运行多个不同版本的 .NET Core 的应用程序。这似乎也对在 Linux 容器内运行微服务有用。嗯……
有什么问题吗?
好吧,现在有一个问题。当您使用 dotnet publish 命令创建独立应用程序时,您的 DLL 会与运行 DLL 所需的所有 .NET 位一起放入目标目录中。也就是说,您可能会在目录中看到 50 个文件。这种情况很快就会改变。一个已经在实验室中运行的倡议 .NET Native 将在未来版本的 .NET Core 中推出。这将构建一个包含所有位的可执行文件。就像您在 Go 语言中编译时一样,您指定目标平台,然后得到一个可执行文件;.NET 也会这样做。
您确实需要为每个目标构建一次,这很合理。您只需包含一个 运行时标识符 并构建代码,例如以下示例,该示例为 64 位处理器上的 RHEL 7.x 构建发布版本
dotnet publish -c Release -r rhel.7-x64
Web 服务、网站等等
.NET Core 模板中包含更多内容,包括对 F# 和 Visual Basic 的支持。要获取 .NET Core 中内置的可用模板的起始列表,请使用命令 dotnet new --help。
提示:.NET Core 模板可以由第三方创建。要了解其中一些第三方模板,请查看 这些模板,然后让您的思绪开始驰骋……
像大多数命令行实用程序一样,通过使用 --help 命令开关,上下文帮助始终触手可及。现在您已经了解了 Linux 上的 .NET Core,帮助功能和一个好的网络搜索引擎就是您开始所需的一切。
其他资源
准备好了解有关 Linux 上 .NET Core 的更多信息了吗?查看以下资源
11 条评论