当您了解软件开发者偏好的操作系统时,您通常可以猜到他们使用的编程语言。如果他们使用 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 条评论