Die C#-Konsolen-App-Vorlage generiert Anweisungen der obersten Ebene.

Ab .NET 6 generiert die Projektvorlage für neue C#-Konsolen-Apps den folgenden Code in der Datei Program.cs:

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

Die neue Ausgabe verwendet aktuelle C#-Features, die den Code vereinfachen, den Sie für ein Programm schreiben müssen. Für .NET 5 und frühere Versionen generiert die Konsolen-App-Vorlage den folgenden Code:

using System;

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

Diese beiden Formen stellen das gleiche Programm dar. Beide sind in C# 10.0 zulässig. Wenn Sie die neuere Version verwenden, müssen Sie nur den Text der Main-Methode schreiben. Der Compiler generiert eine Program-Klasse mit einer Einstiegspunktmethode und platziert alle Anweisungen der obersten Ebene in dieser Methode. Der Name der generierten Methode ist nicht Main, sondern ein Implementierungsdetail, auf das Ihr Code nicht direkt verweisen kann. Sie müssen die anderen Programmelemente nicht einschließen, da der Compiler sie für Sie generiert. Weitere Informationen zu dem Code, den der Compiler generiert, wenn Sie Anweisungen der obersten Ebene verwenden, finden Sie im Artikel zu Anweisungen der obersten Ebene im Abschnitt „Grundlagen“ des C#-Handbuchs.

Sie haben zwei Möglichkeiten, um mit Tutorials zu arbeiten, die nicht aktualisiert wurden, um .NET 6+-Vorlagen zu verwenden:

  • Verwenden Sie den neuen Programmstil, und fügen Sie beim Hinzufügen von Features neue Anweisungen der obersten Ebene hinzu.
  • Konvertieren Sie den neuen Programmstil mit einer Program-Klasse und einer Main-Methode in den älteren Stil.

Wenn Sie die alten Vorlagen verwenden möchten, lesen Sie weiter unten in diesem Artikel Verwenden des alten Programmstils.

Verwenden des neuen Programmstils

Die Features, die das neue Programm so einfach machen, sind Anweisungen der obersten Ebene, globale using-Anweisungen und implizite using-Anweisungen.

Der Begriff Anweisungen der obersten Ebene bedeutet, dass der Compiler die Klassen- und Methodenelemente für Ihr Hauptprogramm generiert. Die vom Compiler generierte Klasse und Einstiegspunktmethode werden im globalen Namespace deklariert. Sie können sich den Code für die neue Anwendung ansehen und sich vorstellen, dass er die Anweisungen in der Main-Methode enthält, die von früheren Vorlagen generiert wurde, aber im globalen Namespace.

Sie können dem Programm weitere Anweisungen hinzufügen, genauso wie Sie Ihrer Main-Methode weitere Anweisungen im herkömmlichen Stil hinzufügen können. Sie können auf args (Befehlszeilenargumente) zugreifen, await verwenden und den Exitcode festlegen. Sie können sogar Funktionen hinzufügen. Sie werden als lokale Funktionen erstellt, die in der generierten Einstiegspunktmethode geschachtelt sind. Lokale Funktionen können keine Zugriffsmodifizierer aufnehmen (z. B public oder protected).

Sowohl Anweisungen auf oberster Ebene als auch implizite using-Anweisungen vereinfachen den Code, auf dem Ihre Anwendung beruht. Fügen Sie der von der Vorlage generierten Program.cs-Datei neue Anweisungen hinzu, um einem vorhandenen Tutorial zu folgen. Stellen Sie sich vor, dass die von Ihnen geschriebenen Anweisungen zwischen den geöffneten und schließenden Klammern in der Main-Methode in den Anweisungen des Tutorials liegen.

Wenn Sie lieber das ältere Format verwenden möchten, können Sie den Code aus dem zweiten Beispiel in diesem Artikel kopieren und das Tutorial wie zuvor fortsetzen.

Weitere Informationen zu Anweisungen der obersten Ebene finden Sie im Tutorial zu Anweisungen auf oberster Ebene.

Implizite using-Anweisungen

De Begriff implizite using-Anweisungen bedeutet, dass der Compiler automatisch eine Gruppe von using-Anweisungen basierend auf dem Projekttyp hinzufügt. Für Konsolenanwendungen sind die folgenden Anweisungen implizit in der Anwendung enthalten:

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

Andere Anwendungstypen enthalten weitere Namespaces, die für diese Anwendungstypen üblich sind.

Wenn Sie using-Anweisungen benötigen, die nicht implizit enthalten sind, können Sie diese der CS-Datei, die Anweisungen der obersten Ebene enthält, oder anderen CS-Dateien hinzufügen. Verwenden Sie für using-Anweisungen, die Sie in allen CS-Dateien in einer Anwendung benötigen, globale using-Anweisungen.

Deaktivieren impliziter using-Anweisungen

Wenn Sie dieses Verhalten entfernen und alle Namespaces in Ihrem Projekt manuell steuern möchten, fügen Sie Ihrer Projektdatei im <PropertyGroup>-Element <ImplicitUsings>disable</ImplicitUsings> hinzu, wie im folgenden Beispiel gezeigt:

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

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

</Project>

Globale using-Anweisungen

Eine globale using-Anweisung importiert einen Namespace für Ihre gesamte Anwendung statt für eine einzelne Datei. Diese globalen Anweisungen können entweder durch Hinzufügen eines <Using>-Elements zur Projektdatei oder durch Hinzufügen der global using-Anweisung zu einer Codedatei hinzugefügt werden.

Sie können Ihrer Projektdatei auch ein <Using>-Element mit einem Remove-Attribut hinzufügen, um eine bestimmte implizite using-Anweisung zu entfernen. Wenn z. B. das Feature für implizite using-Anweisungen mit <ImplicitUsings>enable</ImplicitUsings> aktiviert wurde, wird durch das Hinzufügen des folgenden <Using>-Elements der Namespace System.Net.Http aus den implizit importierten Namespaces entfernt:

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

Verwenden des alten Programmstils

Ab .NET SDK 6.0.300 verfügt die console-Vorlage über eine --use-program-main-Option. Diese können Sie verwenden, um ein Konsolenprojekt zu erstellen, das keine Anweisungen der obersten Ebene verwendet und über eine Main-Methode verfügt.

dotnet new console --use-program-main

Die generierte Program.cs sieht wie folgt aus:

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

Verwenden des alten Programmstils in Visual Studio

  1. Wenn Sie ein neues Projekt erstellen, navigieren die Setupschritte Sie zur Setupseite Zusätzliche Informationen. Aktivieren Sie auf dieser Seite das Kontrollkästchen Keine Anweisungen der obersten Ebene verwenden.

    Visual Studio do not use top-level statements check box

  2. Nachdem Ihr Projekt erstellt wurde, lautet der Program.cs-Inhalt wie folgt:

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

Hinweis

Visual Studio behält den Wert für die Optionen bei, wenn Sie das Projekt das nächste Mal basierend auf derselben Vorlage erstellen. Daher ist beim nächsten Erstellen eines Konsolen-App-Projekts standardmäßig das Kontrollkästchen „Keine Anweisungen der obersten Ebene verwenden“ aktiviert. Der Inhalt der Program.cs-Datei kann abweichen, um das Codeformat einzuhalten, das in den globalen Text-Editor-Einstellungen von Visual Studio oder in der EditorConfig-Datei definiert ist.

Weitere Informationen finden Sie unter Erstellen von portierbaren, benutzerdefinierten Editoreinstellungen mit EditorConfig und Optionen, Text-Editor, C#, Erweitert.