Шаблон консольного приложения C# создает инструкции верхнего уровня

Начиная с .NET 6 шаблон проекта для новых консольных приложений C# создает следующий код в файле Program.cs :

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

В новых выходных данных используются последние функции C#, упрощающие код, который необходимо написать для программы. Для .NET 5 и более ранних версий шаблон консольного приложения создает следующий код:

using System;

namespace MyApp // Note: actual namespace depends on the project name.
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

Эти две формы представляют одну и ту же программу. Оба значения допустимы в C# 10.0. При использовании более новой версии необходимо только написать текст метода Main. Компилятор создает класс с методом точки входа и помещает Program все инструкции верхнего уровня в этот метод. Имя созданного метода не Mainявляется именем, это сведения о реализации, на которые код не может ссылаться напрямую. Вам не нужно включать другие элементы программы, компилятор создает их для вас. Дополнительные сведения о коде компилятор создает при использовании инструкций верхнего уровня в статье по операторам верхнего уровня в разделе "Основы руководства по C#".

Существует два варианта работы с учебниками, которые не были обновлены для использования шаблонов .NET 6+:

  • Используйте новый стиль программы, добавляя новые операторы верхнего уровня по мере добавления компонентов.
  • Преобразование нового стиля программы в старый с помощью класса Program и метода Main.

Если вы хотите использовать старые шаблоны, см . статью "Использовать старый стиль программы" далее в этой статье.

Использовать новый стиль программы

Функции, упрощающие новую программу, — это операторы верхнего уровня, глобальные директивы using и неявные директивы using.

Термин "операторы верхнего уровня" означает, что компилятор создает элементы класса и метода для основной программы. В глобальном пространстве имен объявлены созданный компилятором класс и метод точки входа. Вы можете просмотреть код для нового приложения и представить, что он содержит инструкции внутри метода, созданного Main более ранними шаблонами, но в глобальном пространстве имен.

В программу можно добавить дополнительные операторы, так же как и дополнительные операторы в метод Main в традиционном стиле. Вы можете получить доступ args (аргументы командной строки), использовать awaitи задать код выхода. Можно даже добавлять функции. Они создаются как локальные функции, вложенные в созданный метод точки входа. Локальные функции не могут включать модификаторы доступа (например, public или protected).

Операторы верхнего уровня и неявные директивы using упрощают код вашего приложения. Для изучения существующего учебника добавьте новые операторы в файл Program.cs, созданный шаблоном. Вы можете представить, что написанные вами операторы находятся между открывающей и закрывающей фигурными скобками в методе Main в инструкциях учебника.

Если вы предпочитаете использовать старый формат, скопируйте код из второго примера, приведенного в этой статье, и продолжайте работу с учебником.

Дополнительные сведения см. в руководстве Операторы верхнего уровня.

Неявные директивы using

Термин неявные using директивы означает, что компилятор автоматически добавляет набор using директив на основе типа проекта. Для консольных приложений следующие директивы неявно включаются в приложение:

  • using System;
  • using System.IO;
  • using System.Collections.Generic;
  • using System.Linq;
  • using System.Net.Http;
  • using System.Threading;
  • using System.Threading.Tasks;

Другие типы приложений включают в себя дополнительные пространства имен, общие для этих типов приложений.

Если вам нужны директивы using, которые не включены неявно, вы можете добавить их в файл .cs, содержащий операторы верхнего уровня, или другие файлы .cs. Для директив using, которые вам нужны во всех файлах .cs в приложении, используйте глобальные директивы using.

Отключение неявных директив using

Если вы хотите удалить это поведение и вручную управлять всеми пространствами имен в проекте, добавьте <ImplicitUsings>disable</ImplicitUsings> в файл проекта в элемент, как показано в <PropertyGroup> следующем примере:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    ...
    <ImplicitUsings>disable</ImplicitUsings>
  </PropertyGroup>

</Project>

Глобальные директивы using

Глобальная директива using импортирует пространство имен для всего приложения, а не отдельного файла. Эти глобальные директивы можно добавить, включив элемент <Using> в файл проекта или директиву global using в файл кода.

Вы также можете добавить <Using> элемент с атрибутом Remove в файл проекта, чтобы удалить определенную неявную using директиву. Например, если функция неявных using директив включена, <ImplicitUsings>enable</ImplicitUsings>добавление следующего <Using> элемента удаляет System.Net.Http пространство имен из неявно импортированных:

<ItemGroup>
  <Using Remove="System.Net.Http" />
</ItemGroup>

Использование старого стиля программы

Начиная с пакета SDK для .NET 6.0.300 шаблон console имеет --use-program-main параметр. Используйте его для создания консольного проекта, который не использует операторы верхнего уровня и имеет Main метод.

dotnet new console --use-program-main

Созданный код Program.cs выглядит следующим образом:

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

Использование старого стиля программы в Visual Studio

  1. При создании нового проекта вы перейдете на страницу настройки Дополнительные сведения. На этой странице выберите операторы верхнего уровня проверка.

    Visual Studio do not use top-level statements check box

  2. После создания Program.cs проекта содержимое выглядит следующим образом:

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

Примечание.

Visual Studio сохраняет значение для параметров при следующем создании проекта на основе того же шаблона, поэтому по умолчанию при создании проекта консольного приложения в следующий раз поле "Не использовать операторы верхнего уровня" проверка будет проверка. Содержимое Program.cs файла может отличаться от стиля кода, определенного в параметрах глобального текстового редактора Visual Studio или EditorConfig в файле.

Дополнительные сведения см. в статье "Создание переносимых, настраиваемых параметров редактора с помощью EditorConfig и Options", "Текстовый редактор", "C#", "Дополнительно".