Поделиться через


Шаблон консольного приложения 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
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

В приведенном выше коде фактическое пространство имен зависит от имени проекта.

Эти две формы представляют одну и ту же программу. Оба являются допустимыми в C#. При использовании более новой версии необходимо написать текст метода 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 не использует флажок

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

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

Заметка

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

Для получения дополнительной информации см. Создание переносимых, настраиваемых параметров редактора с использованием EditorConfig и Параметры, Текстовый редактор, C#, Дополнительно.