65.9K
CodeProject 正在变化。 阅读更多。
Home

在 Linux 上使用 .NET Core 快速入门

starIconstarIconstarIconstarIconstarIcon

5.00/5 (6投票s)

2016年9月14日

CPOL

14分钟阅读

viewsIcon

16667

.NET Core 初学者综合指南

我知道您可能会想……这篇文章又是我写的另一篇空谈的文章,是的,确实是。🙂 .NET Core 是我喜欢的另一个产品,第一个是 .NET Framework 本身。去年 .NET Core 问世,微软表示他们将作为开源环境和理念的一部分发布源代码。遵循开源项目的环境和道德,微软一直在努力吸引全球开发者加入他们的环境、平台和服务。例如,.NET Framework 可以在 Windows 上运行,C# 语言用于构建 Windows 应用商店应用,C# 也是微软 Web 应用程序开发框架 ASP.NET 的主要语言,等等。微软的在线云服务也用 C# 编写;主要是。这些东西是相互关联的。因此,当微软将这一切作为一个开源项目推出时,事情就开始变得更好!

每个人都知道 .NET Core 的背景,如果您不知道,我建议您阅读微软的博客文章,《Introducing .NET Core》。(他们) 的基本想法是提供一个可以在任何平台、任何应用程序类型和任何目标框架上工作的框架。

引言和背景

在这篇快速入门文章中,我将带您了解 .NET Core 的入门知识,如何在 Linux 机器上安装它,我还会给出我自己的观点,为什么您需要在 Linux 机器上安装 .NET Core 而不是 Windows 机器。然后,我将带您了解 .NET Core 编程的不同步骤,以及如何使用基于终端的环境来执行多项任务。但首先,我们先做最重要的事情。

我敢肯定您已经听说过 .NET Core 和微软近年来发布的其他很棒的产品,在所有这些服务中,我喜欢的是

  1. C# 6
    • 依我之见,我认为现在的语言看起来更简洁了。这些“糖衣炮弹”般的功能也使语言更容易编写。如果您还没有读过,请阅读我之前的博客文章,《Experimenting with C# 6’s new features》
  2. .NET Core
    • 当然,谁不想在其他平台上使用 .NET 呢。
  3. Xamarin 收购
    • 我今晚会试一下这个。祝我好运。
  4. 剩下的都是“ usual ”的常规内容。

在这篇文章中,我将讨论 Linux 上的 .NET Core,因为我已经讨论过 C# 的相关内容了。

Screenshot (898)

图 1:.NET Core 是微软推出的跨平台编程框架

为什么要在 Linux 上使用 .NET Core?

在深入探讨之前,正如我所说的,我将为您提供一些关于在 Linux 上使用 .NET Core 而不是 Windows (目前!) 的考量,它们如下。您不必认真对待或总是考虑它们,它们只是我的观点和看法,您可以自由地拥有自己的看法。

1. .NET Core 尚未完成

.NET 发布为公开稳定版本还需要一段时间。在此之前,在您自己的机器上使用这种前沿技术不是一个好主意,并且总有一天,您会考虑删除这些二进制文件。在这种情况下,最好将其放在某个虚拟机中使用。我已经为我的开发目的设置了几个 Linux (基于 Ubuntu) 虚拟机,我建议您也这样做。

  1. 安装 VirtualBox (或任何您喜欢的其他虚拟化软件;我喜欢 VirtualBox,因为它简单)。
  2. 设置一个 Ubuntu 环境。
    • 请记住使用 Ubuntu 14.04。较新的版本目前尚不支持。
  3. 在该机器上安装 .NET Core。

如果出了什么问题,您可以轻松地恢复到您想要的状态。如果代码出了问题,您完全不必担心您的数据或您的机器。

2. 一切都是命令行

如果您喜欢命令行界面,Windows 操作系统不是您的选择。我正在等待 BASH 语言像 Ubuntu 那样被引入 Windows,在此之前,我不会在我的 Windows 环境中使用任何需要命令行界面的东西。然而,在 Linux 中,几乎所有东西都有命令行界面,而且由于 .NET Core 是微软推出的基于命令的程序,与 Windows 相比,我在 Linux 上使用它更愉快。

此外,在命令行界面上,创建、构建和运行 .NET Core 项目就像 1... 2... 3 一样简单。您将在下面的部分中看到如何做到这一点。🙂

3. 我不使用 Mac

除了这些点之外,剩下的唯一有效点就是为什么我们不为 .NET Core 使用 Mac OS。那是因为我不使用它。您也可以自由地为 .NET Core 开发使用 Mac OS。.NET Core 支持它,只是我不支持那个开发环境。😀

.NET Core 的安装

虽然计划很快,命令会像

$ sudo apt-get install dotnet

在 Ubuntu 和 Debian 派生发行版以外的其他操作系统和 Mac OS X 上使用相同的命令。但直到 .NET Core 仍处于开发阶段,这都不会发生。在此之前,您可以执行其他步骤来在自己的机器上安装 .NET Core。我想跳过这一部分,让微软为您提供安装框架的步骤。

在此步骤之后,请务必确保平台已成功安装。在几乎任何环境中,您都可以运行以下命令来获取成功消息。

> dotnet --help

如果 .NET 已安装,它将在屏幕上显示版本和其他帮助信息。否则,您可能需要确保该过程在安装软件包期间没有出现任何问题。在我开始之前,我想向您展示“dotnet”命令提供的帮助信息,

afzaal@afzaal-VirtualBox:~/Projects/Sample$ dotnet --help
.NET Command Line Tools (1.0.0-preview1-002702)
Usage: dotnet [common-options] [command] [arguments]

Arguments:
 [command]      The command to execute
 [arguments]    Arguments to pass to the command

Common Options (passed before the command):
 -v|--verbose   Enable verbose output
 --version      Display .NET CLI Version Number
 --info         Display .NET CLI Info

Common Commands:
 new           Initialize a basic .NET project
 restore       Restore dependencies specified in the .NET project
 build         Builds a .NET project
 publish       Publishes a .NET project for deployment (including the runtime)
 run           Compiles and immediately executes a .NET project
 test          Runs unit tests using the test runner specified in the project
 pack          Creates a NuGet package

所以,您明白了我们将深入研究 `dotnet` 命令提供的命令

  1. 创建包
  2. 还原包
  3. 运行包
    • `build` 和 `run` 都有效,`run` 会执行,`build` 只会构建项目。这很容易。
  4. 打包

我将把内容分解,使其更清晰、更易于理解。您可能已经注意到的一件事是,在此选项集中没有提供显式命令来本地编译项目。据我所知,此支持已被移除,直至另行通知。在此之前,您需要传递一个框架类型来编译和构建。

在 Linux 上使用 .NET Core

尽管两个环境的过程相似,我将向您展示 Ubuntu 中的过程。此外,我将解释这些命令的用途以及 .NET 提供的多个选项。我不想让您感到孤单,因为这里的大部分段落都将是为微软 .NET 项目团队准备的,所以我也会为团队提供一些建议。但是,请放心,我会确保内容保持在主题内。

1. 创建新项目

我同意框架开发尚未接近发布,所以我想我也应该考虑为项目提供自己的建议。目前,.NET Core 支持在目录中创建新项目,并使用目录名作为默认名称 (如果需要的话)。.NET Core 的初学者只知道紧跟在“dotnet”之后的命令。然而,还有其他参数可以收集更多参数和可选值,例如

  1. 项目类型
    • 可执行文件
      • 目前,.NET 只生成 DLL 文件作为输出。控制台是默认选项。
    • 动态链接库
  2. 用于编程的语言

要创建新项目,目前,您只需执行以下命令

$ dotnet new

依我之见,如果您只是在学习,这已经足够了。但是,如果您执行以下命令,您将了解如何修改项目创建方式及其如何用于修改项目本身,包括使用的编程语言。

$ dotnet new --help
.NET Initializer

Usage: dotnet new [options]

Options:
 -h|--help Show help information
 -l|--lang <LANGUAGE> Language of project [C#|F#]
 -t|--type <TYPE> Type of project

选项是可选的。但是,如果您想用 F# 等不同的编程语言创建项目,您可以传递这些值。您也可以更改类型,目前,只支持控制台应用程序。

我已经设置了一个目录用于我的示例测试,

Screenshot (899)

图 2:打开的示例目录

所以,我在这里创建了项目。我什么都没动,您可以看到 .NET 本身创建了文件。

Screenshot (900)

图 3:在同一目录中创建项目

请原谅我创建了一个 F# 项目。我那样做是为了表明我可以传递项目中使用的语言。我删除了它,而是创建了一个基于 C# 程序的项目。这是一个最小的控制台应用程序。

.NET Core 应用程序中的每个项目都包含

  1. 程序源代码
    • 如果您要创建一个 F# 项目。那么程序将用 F# 语言编写,在默认设置的情况下。程序是用 C# 语言编写的。
  2. 一个 `project.json` 文件
    • 此文件包含项目的设置以及为构建项目而需要在项目中维护的依赖项。

但是,一旦您要运行,您就需要构建项目,这正是我们将在下一步中要做的。

2. 还原项目

我们没有删除项目。这仅仅意味着在实际构建运行项目之前,需要还原项目并解析依赖项。可以使用以下命令完成此操作

$ dotnet restore

注意:确保您位于创建项目的目录中。

此命令用于还原包。如果您在还原依赖项之前尝试构建项目,您将收到错误消息:

项目 {name} 没有锁定文件。

.NET Framework 使用锁定文件来查找项目所需的依赖项,然后开始构建和编译过程。这意味着,在您的项目可以执行以确保“其可执行”之前,此文件是必需的。

执行此命令后,您将在项目中获得另一个文件。

Screenshot (902)

图 4:`project.lock.json` 文件现在可在项目目录中找到。

因此,最后,您可以继续构建项目并在自己的机器上以默认设置运行它。

3. 构建项目

正如我上面已经提到的,原生编译支持已从工具链中移除,我认为 Ubuntu 开发者可能需要等待一段时间,而且在此期间可能只在 Windows 环境中支持。但是,我们仍然可以以某种方式执行项目,也可以执行其他选项,例如发布和创建 NuGet 包。

您可以使用以下命令构建项目

$ dotnet build

请记住,您需要至少还原一次项目。`Build` 命令将为您执行以下操作:

  1. 它将为您构建项目。
  2. 它将创建输出目录。
    • 但是,正如我稍后将要讨论的,您可以更改输出的保存目录。
  3. 如果在构建项目时出现任何错误,它将提示您。

我们已经看到了先前命令的工作方式,所以让我们也将其分解一下。此命令也支持操作。它为您提供可选的标志,例如

  1. 目标框架
  2. 用于输出二进制文件的目录
  3. 要使用的运行时
  4. 配置等

这样,您就可以通过将参数传递给 dotnet 脚本来自动化构建过程。

4. 部署项目

与其使用“运行项目”这个词,我认为如果我说“部署项目”会更好。无论如何,项目在运行之前也是部署在机器上的。首先,我将展示如何运行项目,稍后我将展示如何创建 NuGet 包。

要运行项目,一旦您构建了项目或尚未构建,您就可以执行以下命令

$ dotnet run

如果项目尚未构建,此命令也会构建项目。现在,如果我在项目所在的目录中执行该命令,在我的 Ubuntu 上,输出会是这样的:

Screenshot (904)

图 5:终端中的项目输出

如您所见,项目正常工作,并在终端屏幕上显示“Hello World!”消息。这是一个控制台项目,一个简单的项目,仅包含 C# 中的控制台输出命令。这就是为什么程序会这样工作。

创建 NuGet 包

除此之外,我想分享一下如何使用终端从该项目创建 NuGet 包。NuGet 包已经存在很长时间了,以前在 Visual Studio 环境中创建它们非常容易。在这个编程框架中,过程甚至更简单。您只需执行以下命令

$ dotnet pack

此命令将项目打包成 NuGet 包。我想向您展示它生成的输出,以便您了解它是如何完成所有工作的。

afzaal@afzaal-VirtualBox:~/Projects/Sample$ dotnet pack
Project Sample (.NETCoreApp,Version=v1.0) was previously compiled. 
Skipping compilation.
Producing nuget package "Sample.1.0.0" for Sample
Sample -> /home/afzaal/Projects/Sample/bin/Debug/Sample.1.0.0.nupkg
Producing nuget package "Sample.1.0.0.symbols" for Sample
Sample -> /home/afzaal/Projects/Sample/bin/Debug/Sample.1.0.0.symbols.nupkg

它首先构建项目,如果项目已构建,则跳过该过程。完成后,它会创建一个新包,并简单地生成可以发布到图库的文件。NuGet 包管理命令还允许您执行其他功能,例如更新版本号本身,还可以指定框架等。有关更多信息,请查看此命令的 `help` 输出。

afzaal@afzaal-VirtualBox:~/Projects/Sample$ dotnet pack --help
.NET Packager

Usage: dotnet pack [arguments] [options]

Arguments:
 <PROJECT> The project to compile, defaults to the current directory. 
 Can be a path to a project.json or a project directory

Options:
 -h|--help Show help information
 -o|--output <OUTPUT_DIR> Directory in which to place outputs
 --no-build Do not build project before packing
 -b|--build-base-path <OUTPUT_DIR> Directory in which to place temporary build outputs
 -c|--configuration <CONFIGURATION> Configuration under which to build
 --version-suffix <VERSION_SUFFIX> Defines what `*` should be replaced with in version 
  field in project.json

查看最后一个,它显示了版本后缀。它可以用于根据构建版本等更新版本。还有一个设置,允许您修改构建过程更新版本号的方式。这是基于生成二进制输出的构建来更改版本号的常用方法。

NuGet 包文件保存在默认输出目录中。

Screenshot (905)

图 6:默认输出目录中的 NuGet 包

剩下的很容易,您可以直接将包从这里上传到 NuGet 图库。

结束语

最后,我一直在想我应该为这份指南出版一本微型电子书。内容越来越长,我越来越累,但是因为这给了我很多关于事情的想法,我认为我可以写一篇关于 Windows 和 Linux 上 .NET Core 的比较,而且我认为我有足够的时间去做。

其次,我有一些给最终用户的建议

  1. 请不要将 .NET Core 用于商业软件。这很快就会改变。
  2. .NET Core 是一项前沿技术,而且,由于没有文档,您将在学习和提问中浪费大量时间。因此,如果您正在考虑学习 .NET 框架,那么请学习 .NET Framework 而不是 .NET Core。.NET Framework 有大量的优秀资源、文章、技巧和教程。
  3. 如果您想要跨平台功能和像 .NET Framework 那样的强大支持,我的建议是 Mono Project 而不是 .NET Core,也许是因为它还不够成熟。

我对这个框架本身有一些反馈意见

  1. 它进展得很好。句号。
  2. 由于这是一个跨平台框架,一些功能不应仅限 Windows,例如“dotnet compile –native”命令。它们必须提供给每个平台。

最后,这个框架是一个很棒的编程工具。我喜欢用 .NET Core 编程,因为它不需要太多努力。此外,多种编程语言的好处仍然存在,此外,Visual Studio Code 也是一个很棒的 IDE,C# 扩展使其更好。我现在将写很多关于这些功能的文章,因为我最近从所有学术事务中解脱出来了。🙂

下篇文章再见。

© . All rights reserved.