Начало работы с .NET Core в Windows, Linux и Mac OS с помощью командной строкиGet started with .NET Core on Windows/Linux/macOS using the command line

В этой статье показано, как приступить к разработке кроссплатформенных приложений с помощью средств .NET Core CLI.This article will show you how to start developing cross-platforms apps in your machine using the .NET Core CLI tools.

Если вы не знакомы с набором средств CLI .NET Core, прочитайте обзор пакета SDK для .NET Core.If you're unfamiliar with the .NET Core CLI toolset, read the .NET Core SDK overview.

Предварительные требованияPrerequisites

  • Пакет SDK для .NET Core 3.1 или более поздней версии..NET Core SDK 3.1 or later versions.
  • Текстовый редактор или редактор кода по вашему выбору.A text editor or code editor of your choice.

Первое консольное приложениеHello, Console App!

Просмотреть или скачать пример кода можно в репозитории dotnet/samples на сайте GitHub.You can view or download the sample code from the dotnet/samples GitHub repository. Инструкции по загрузке см. в разделе Просмотр и скачивание примеров.For download instructions, see Samples and Tutorials.

Откройте командную строку и создайте папку с именем Hello.Open a command prompt and create a folder named Hello. Перейдите в созданную папку и введите следующую команду:Navigate to the folder you created and type the following:

dotnet new console
dotnet run

Вкратце рассмотрим эти команды.Let's do a quick walkthrough:

  1. dotnet new console

    dotnet new создает актуальный файл проекта Hello.csproj с зависимостями, необходимыми для создания консольного приложения.dotnet new creates an up-to-date Hello.csproj project file with the dependencies necessary to build a console app. Эта команда также позволяет создать Program.cs — простой файл, содержащий точку входа для приложения.It also creates a Program.cs, a basic file containing the entry point for the application.

    Hello.csproj:Hello.csproj:

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp2.2</TargetFramework>
      </PropertyGroup>
    
    </Project>
    

    В файле проекта указываются все данные, необходимые для восстановления зависимостей и создания программы.The project file specifies everything that's needed to restore dependencies and build the program.

    • Элемент <OutputType> указывает, что мы создаем исполняемый файл, то есть консольное приложение.The <OutputType> element specifies that we're building an executable, in other words a console application.
    • Элемент <TargetFramework> указывает, какая реализация.NET является целевой.The <TargetFramework> element specifies what .NET implementation we're targeting. В расширенном сценарии обработки можно указать несколько целевых платформ и выполнить сборку во всех средах за одну операцию.In an advanced scenario, you can specify multiple target frameworks and build to all those in a single operation. В этом руководстве рассматривается сборка только для платформы .NET Core 3.1.In this tutorial, we'll stick to building only for .NET Core 3.1.

    Program.cs:Program.cs:

    using System;
    
    namespace Hello
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Hello World!");
            }
        }
    }
    

    Программа начинается с команды using System, что означает "добавить все данные пространства имен System в область видимости для этого файла".The program starts by using System, which means "bring everything in the System namespace into scope for this file". Пространство имен System включает класс Console.The System namespace includes the Console class.

    Затем мы определяем пространство имен с именем Hello.We then define a namespace called Hello. Вы можете сменить это имя на любое другое.You can change this to anything you want. В этом пространстве имен определяется класс с именем Program и методом Main, который принимает массив строк с именем args.A class named Program is defined within that namespace, with a Main method that takes an array of strings named args. Этот массив содержит список аргументов, передаваемых при вызове программы.This array contains the list of arguments passed in when the program is run. В нашем примере массив не используется и программа просто выводит строку "Hello World!"As it is, this array is not used and the program simply writes the text "Hello World!" в консоль.to the console. Позднее мы внесем в код изменения, использующие этот аргумент.Later, we'll make changes to the code that will make use of this argument.

    dotnet new неявно вызывает dotnet restore.dotnet new calls dotnet restore implicitly. dotnet restore вызывает NuGet (диспетчер пакетов .NET) для восстановления дерева зависимостей.dotnet restore calls into NuGet (.NET package manager) to restore the tree of dependencies. NuGet анализирует файл Hello.csproj, скачивает указанные в нем зависимости (или извлекает их из кэша на вашем компьютере) и записывает файл obj/project.assets.json, который требуется для компиляции и запуска примера.NuGet analyzes the Hello.csproj file, downloads the dependencies defined in the file (or grabs them from a cache on your machine), and writes the obj/project.assets.json file, which is necessary to compile and run the sample.

  2. dotnet run

    dotnet run вызывает dotnet build, чтобы проверить, выполнена ли сборка целевых объектов. Затем вызывается dotnet <assembly.dll> для запуска целевого приложения.dotnet run calls dotnet build to ensure that the build targets have been built, and then calls dotnet <assembly.dll> to run the target application.

    dotnet run
    
    Hello World!
    

    Вместо этого вы можете выполнить dotnet build, чтобы скомпилировать код, не запуская консольные приложения сборки.Alternatively, you can also run dotnet build to compile the code without running the build console applications. В таком случае создается DLL-файл с готовым приложением. Файлу присваивается имя проекта.This results in a compiled application, as a DLL file, based on the name of the project. В нашем примере создается файл с именем Hello.dll.In this case, the file created is named Hello.dll. Это приложение можно выполнить с помощью dotnet bin\Debug\netcoreapp3.1\Hello.dll в ОС Windows (или / в системах, отличных от Windows).This app can be run with dotnet bin\Debug\netcoreapp3.1\Hello.dll on Windows (use / for non-Windows systems).

    dotnet bin\Debug\netcoreapp3.1\Hello.dll
    
    Hello World!
    

    При компиляции этого приложения создается исполняемый файл, формат которого зависит от операционной системы, а также Hello.dll.When the app is compiled, an operating system-specific executable was created along with the Hello.dll. В Windows это будет Hello.exe, а в Linux или macOS — hello.On Windows, this would be Hello.exe; on Linux or macOS, this would be hello. Для приведенного выше примера файлу будет присвоено имя Hello.exe или Hello.With the example above, the file is named with Hello.exe or Hello. Этот исполняемый файл можно запускать напрямую.You can run that executable directly.

    .\bin\Debug\netcoreapp3.1\Hello.exe
    
    Hello World!
    

Изменение программыModify the program

Давайте немного изменим программу.Let's change the program a bit. С числами Фибоначчи интересно работать. Поэтому давайте добавим их в программу, а также применим аргумент для приветствия пользователя приложения.Fibonacci numbers are fun, so let's add that and also to use the argument to greet the person running the app.

  1. Замените содержимое файла Program.cs следующим кодом:Replace the contents of your Program.cs file with the following code:

    using System;
    
    namespace Hello
    {
        class Program
        {
            static void Main(string[] args)
            {
                if (args.Length > 0)
                {
                    Console.WriteLine($"Hello {args[0]}!");
                }
                else
                {
                    Console.WriteLine("Hello!");
                }
    
                Console.WriteLine("Fibonacci Numbers 1-15:");
    
                for (int i = 0; i < 15; i++)
                {
                    Console.WriteLine($"{i + 1}: {FibonacciNumber(i)}");
                }
            }
    
            static int FibonacciNumber(int n)
            {
                int a = 0;
                int b = 1;
                int tmp;
    
                for (int i = 0; i < n; i++)
                {
                    tmp = a;
                    a = b;
                    b += tmp;
                }
    
                return a;
            }
        }
    }
    
  2. Выполните dotnet build для компиляции изменений.Run dotnet build to compile the changes.

  3. Запустите программу, передав параметр в приложение.Run the program passing a parameter to the app. Когда вы запускаете приложение с помощью команды dotnet, добавьте в конце --.When you use the dotnet command to run an app, add -- to the end. Все, что находится справа от --, будет передано в приложение в виде параметра.Anything to the right of -- will be passed as a parameter to the app. В приведенном ниже примере в приложение передается значение John.In the following example, the value John is passed to the app.

    $ dotnet run -- John
    Hello John!
    Fibonacci Numbers 1-15:
    1: 0
    2: 1
    3: 1
    4: 2
    5: 3
    6: 5
    7: 8
    8: 13
    9: 21
    10: 34
    11: 55
    12: 89
    13: 144
    14: 233
    15: 377
    

Вот и все!And that's it! Вы можете изменять Program.cs по своему усмотрению.You can modify Program.cs any way you like.

Работа с несколькими файламиWorking with multiple files

Отдельные файлы удобны для простых одиночных программ. Но при создании более сложных приложений, возможно, в проекте будет несколько файлов кода.Single files are fine for simple one-off programs, but if you're building a more complex app, you're probably going to have multiple code files on your project. Используем в качестве основы предыдущий пример, реализовав в нем кэширование значений Фибоначчи и рекурсию.Let's build off of the previous Fibonacci example by caching some Fibonacci values and add some recursive features.

  1. Добавьте в каталог Hello новый файл FibonacciGenerator.cs со следующим кодом:Add a new file inside the Hello directory named FibonacciGenerator.cs with the following code:

    using System;
    using System.Collections.Generic;
    
    namespace Hello
    {
        public class FibonacciGenerator
        {
            private Dictionary<int, int> _cache = new Dictionary<int, int>();
            
            private int Fib(int n) => n < 2 ? n : FibValue(n - 1) + FibValue(n - 2);
            
            private int FibValue(int n)
            {
                if (!_cache.ContainsKey(n))
                {
                    _cache.Add(n, Fib(n));
                }
                
                return _cache[n];
            }
            
            public IEnumerable<int> Generate(int n)
            {
                for (int i = 0; i < n; i++)
                {
                    yield return FibValue(i);
                }
            }
        }
    }
    
  2. Измените метод Main в своем файле Program.cs, чтобы создать экземпляр класса new и вызвать его метод, как показано в следующем примере:Change the Main method in your Program.cs file to instantiate the new class and call its method as in the following example:

    using System;
    
    namespace Hello
    {
        class Program
        {
            static void Main(string[] args)
            {
                var generator = new FibonacciGenerator();
                foreach (var digit in generator.Generate(15))
                {
                    Console.WriteLine(digit);
                }
            }
        }
    }
    
  3. Выполните dotnet build для компиляции изменений.Run dotnet build to compile the changes.

  4. Запустите приложение, выполнив dotnet run.Run your app by executing dotnet run. Ниже приведены выходные данные программы:The following shows the program output:

    $ dotnet run
    0
    1
    1
    2
    3
    5
    8
    13
    21
    34
    55
    89
    144
    233
    377
    

Публикация приложенияPublish your app

Когда все будет готово к распределению приложения, используйте команду dotnet publish для создания папки publish по адресу bin\debug\netcoreapp3.1\publish\ (используйте / для систем, отличных от Windows).Once you're ready to distribute your app, use the dotnet publish command to generate the publish folder at bin\debug\netcoreapp3.1\publish\ (use / for non-Windows systems). Содержимое папки publish можно распространить на другие платформы, если на них установлена среда выполнения .NET.You can distribute the contents of the publish folder to other platforms as long as they've already installed the dotnet runtime.

dotnet publish
Microsoft (R) Build Engine version 16.4.0+e901037fe for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Restore completed in 20 ms for C:\Code\Temp\Hello\Hello.csproj.
  Hello -> C:\Code\Temp\Hello\bin\Debug\netcoreapp3.1\Hello.dll
  Hello -> C:\Code\Temp\Hello\bin\Debug\netcoreapp3.1\publish\

Выходные данные могут отличаться от представленных выше из-за другого значения текущей папки и (или) операционной системы. Но в остальном данные будут такими же.The output above may differ based on your current folder and operating system, but the output should be similar.

Запустить опубликованное приложение можно с помощью команды dotnet:You can run your published app with the dotnet command:

dotnet bin\Debug\netcoreapp3.1\publish\Hello.dll

Hello World!

Как уже упоминалось в начале статьи, создается исполняемый файл, формат которого зависит от операционной системы, а также Hello.dll.As mentioned at the start of this article, an operating system-specific executable was created along with the Hello.dll. В Windows это будет Hello.exe, а в Linux или macOS — hello.On Windows, this would be Hello.exe; on Linux or macOS, this would be hello. Для приведенного выше примера файлу будет присвоено имя Hello.exe или Hello.With the example above, the file is named with Hello.exe or Hello. Опубликованный исполняемый файл можно запускать напрямую.You can run this published executable directly.

.\bin\Debug\netcoreapp3.1\Hello.exe

Hello World!

ЗаключениеConclusion

Вот и все!And that's it! Теперь вы можете воспользоваться изученными здесь основными концепциями, чтобы создавать собственные программы.Now, you can start using the basic concepts learned here to create your own programs.

См. такжеSee also