当您了解软件开发人员首选的操作系统时,您通常可以猜到他们使用的编程语言。如果他们使用 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 发行版列表包括红帽企业 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 条评论