O modelo de aplicativo de console C# gera instruções de nível superior

A partir do .NET 6, o modelo de projeto para novos aplicativos de console C# gera o seguinte código no arquivo Program.cs :

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

A nova saída usa recursos recentes do C# que simplificam o código que você precisa escrever para um programa. Para o .NET 5 e versões anteriores, o modelo de aplicativo de console gera o seguinte código:

using System;

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

Estas duas formas representam o mesmo programa. Ambos são válidos com C# 10.0. Quando você usa a versão mais recente, você só precisa escrever o Main corpo do método. O compilador gera uma Program classe com um método de ponto de entrada e coloca todas as suas instruções de nível superior nesse método. O nome do método gerado não é , é um detalhe de implementação que seu código não Mainpode referenciar diretamente. Você não precisa incluir os outros elementos do programa, o compilador os gera para você. Você pode aprender mais sobre o código que o compilador gera quando você usa instruções de nível superior no artigo sobre instruções de nível superior na seção de fundamentos do Guia C#.

Você tem duas opções para trabalhar com tutoriais que não foram atualizados para usar modelos do .NET 6+:

  • Use o novo estilo de programa, adicionando novas instruções de nível superior à medida que adiciona recursos.
  • Converta o novo estilo de programa para o estilo mais antigo, com uma Program classe e um Main método.

Se você quiser usar os modelos antigos, consulte Usar o estilo de programa antigo mais adiante neste artigo.

Use o novo estilo de programa

Os recursos que tornam o novo programa mais simples são declarações de alto nível, diretivas globais using e diretivas implícitasusing.

O termo instruções de nível superior significa que o compilador gera os elementos de classe e método para o seu programa principal. A classe gerada pelo compilador e o método de ponto de entrada são declarados no namespace global. Você pode examinar o código do novo aplicativo e imaginar que ele contém as instruções dentro do Main método gerado por modelos anteriores, mas no namespace global.

Você pode adicionar mais instruções ao programa, assim como você pode adicionar mais instruções ao seu Main método no estilo tradicional. Você pode acessar args (argumentos de linha de comando), usar awaite definir o código de saída. Você pode até adicionar funções. Eles são criados como funções locais aninhadas dentro do método de ponto de entrada gerado. As funções locais não podem incluir modificadores de acesso (por exemplo, public ou protected).

Tanto as instruções de nível superior quanto as diretivas implícitas using simplificam o código que compõe seu aplicativo. Para seguir um tutorial existente, adicione novas instruções ao arquivo Program.cs gerado pelo modelo. Você pode imaginar que as instruções que você escreve estão entre as chaves de abertura e fechamento no Main método nas instruções do tutorial.

Se preferir usar o formato mais antigo, copie o código do segundo exemplo deste artigo e continue o tutorial como antes.

Você pode aprender mais sobre instruções de nível superior no tutorial de exploração de instruções de nível superior.

Diretivas implícitas using

O termo diretivas implícitas using significa que o compilador adiciona automaticamente um conjunto de diretivas com base no tipo de using projeto. Para aplicativos de console, as seguintes diretivas estão implicitamente incluídas no aplicativo:

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

Outros tipos de aplicativo incluem mais namespaces que são comuns para esses tipos de aplicativo.

Se precisar de using diretivas que não estão incluídas implicitamente, você pode adicioná-las ao arquivo de .cs que contém instruções de nível superior ou a outros arquivos .cs. Para using diretivas que você precisa em todos os arquivos de .cs em um aplicativo, use diretivas globaisusing.

Desativar diretivas implícitas using

Se você quiser remover esse comportamento e controlar manualmente todos os namespaces em seu projeto, adicione <ImplicitUsings>disable</ImplicitUsings> ao seu arquivo de projeto no <PropertyGroup> elemento , conforme mostrado no exemplo a seguir:

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

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

</Project>

Diretivas globais using

Uma diretiva global using importa um namespace para todo o aplicativo em vez de um único arquivo. Essas diretivas globais podem ser adicionadas adicionando um item ao arquivo de projeto ou adicionando a diretiva a global using um <Using> arquivo de código.

Você também pode adicionar um item com um Remove<Using> atributo ao seu arquivo de projeto para remover uma diretiva implícita using específica. Por exemplo, se o recurso de diretivas implícitas using estiver ativado com <ImplicitUsings>enable</ImplicitUsings>, adicionar o seguinte <Using> item removerá o System.Net.Http namespace daqueles que são importados implicitamente:

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

Use o estilo de programa antigo

A partir do .NET SDK 6.0.300, o console modelo tem uma --use-program-main opção. Use-o para criar um projeto de console que não use instruções de nível superior e tenha um Main método.

dotnet new console --use-program-main

O gerado Program.cs é o seguinte:

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

Usar o estilo de programa antigo no Visual Studio

  1. Quando você cria um novo projeto, as etapas de configuração navegam até a página Configuração de informações adicionais. Nesta página, marque a caixa de seleção Não usar instruções de nível superior.

    Visual Studio do not use top-level statements check box

  2. Depois que o projeto é criado, o conteúdo é o Program.cs seguinte:

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

Nota

O Visual Studio preserva o valor para as opções da próxima vez que você criar o projeto com base no mesmo modelo, portanto, por padrão, ao criar o projeto Aplicativo de Console da próxima vez, a caixa de seleção "Não usar instruções de nível superior" será marcada. O conteúdo do arquivo pode ser diferente para corresponder ao estilo de código definido nas configurações globais do editor de Program.cs texto do Visual Studio ou no EditorConfig arquivo.

Para obter mais informações, consulte Criar configurações de editor portáteis e personalizadas com EditorConfig and Options, Editor de texto, C#, Avançado.