.NET 6 C# Konsolen-App-Vorlage generiert Anweisungen auf oberster Ebene

Ab .NET 6 generiert die Projektvorlage für neue C#-Konsolen-Apps den folgenden Code in der Datei Programm.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 synthetisiert eine Program Klasse mit einer Main Methode und platziert alle Anweisungen auf oberster Ebene in dieser Main Methode. Sie müssen die anderen Programmelemente nicht einschließen, der Compiler generiert sie für Sie. Sie können mehr über den Code erfahren, den der Compiler generiert, wenn Sie im Artikel über Anweisungen auf oberster Ebene im Abschnitt "Grundlagen" des C#-Leitfadens Anweisungen verwenden.

Sie haben zwei Optionen zum Arbeiten mit Lernprogrammen, 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 später in diesem Artikel die Verwendung des alten Programmformats .

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.

Die Anweisungen auf oberster Ebene bedeutet, dass der Compiler die Klassen- und Methodenelemente für Ihr Hauptprogramm generiert. Die generierte Compilerklasse und Main -methode werden im globalen Namespace deklariert. Sie können den Code für die neue Anwendung betrachten und sich vorstellen, dass sie die Anweisungen innerhalb der Main von früheren Vorlagen generierten Methode enthält, 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 (Befehlszeilenargumente) zugreifenargs, verwenden awaitund den Exitcode festlegen. Sie können sogar Funktionen hinzufügen. Sie werden als lokale Funktionen erstellt, die in der generierten Main-Methode geschachtelt sind. Lokale Funktionen können keine Zugriffsmodifizierer enthalten (z public . B. 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

Der Ausdruck implizite using Richtlinien bedeutet, dass der Compiler automatisch eine Reihe von using Richtlinien 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 möchten und alle Namespaces in Ihrem Projekt manuell steuern möchten, fügen <ImplicitUsings>disable</ImplicitUsings> Sie Der Projektdatei im <PropertyGroup> Element 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 auch ein <Using> Element mit einem Remove Attribut ihrer Projektdatei hinzufügen, um eine bestimmte implizite using Richtlinie zu entfernen. Wenn beispielsweise das Feature "implizite using Richtlinien" aktiviert <ImplicitUsings>enable</ImplicitUsings>ist, entfernt das Hinzufügen des folgenden <Using> Elements den Namespace aus denen, die System.Net.Http implizit importiert werden:

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

Verwenden des alten Programmstils

Während eine .NET 6-Konsolen-App-Vorlage die neue Formatvorlage von Anweisungen auf oberster Ebene generiert, wird die Verwendung von .NET 5 nicht verwendet. Wenn Sie ein .NET 5-Projekt erstellen, erhalten Sie den alten Programmstil. Anschließend können Sie die Projektdatei zum Ziel .NET 6 bearbeiten, aber die alte Programmformatvorlage für die Datei "Programm .cs" beibehalten.

Wichtig

Zum Erstellen eines Projekts für .NET 5 sind die .NET 5-Vorlagen erforderlich. Die .NET 5-Vorlagen können manuell mit dem dotnet new --install-Befehl oder durch Installieren des .NET 5 SDK installiert werden.

  1. Erstellen Sie ein neues Projekt, das auf .NET 5 ausgerichtet ist.

    dotnet new console --framework net5.0
    
  2. Öffnen Sie die Projektdatei in einem Text-Editor, und ändern Sie <TargetFramework>net5.0</TargetFramework> zu <TargetFramework>net6.0</TargetFramework>.

    Hier sehen Sie einen Dateivergleich, der die Änderungen veranschaulicht:

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
    -   <TargetFramework>net5.0</TargetFramework>
    +   <TargetFramework>net6.0</TargetFramework>
      </PropertyGroup>
    
    </Project>
    
  3. Optionaler Schritt: Sie können weiterhin einige der neueren .NET 6- und C#-Features verwenden, indem Sie der Projektdatei die Eigenschaften für implizite using-Anweisungen und Nullwerte zulassenden Kontext hinzufügen.

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
    +   <ImplicitUsings>enable</ImplicitUsings>
    +   <Nullable>enable</Nullable>
      </PropertyGroup>
    
    </Project>
    

Verwenden des alten Programmstils in Visual Studio

Wenn Sie ein neues Konsolenprojekt in Visual Studio erstellen, werden Sie aufgefordert, in einem Dropdownfeld das Zielframework auszuwählen, das Sie verwenden möchten. Ändern Sie diesen Wert zu 5.0. Nachdem das Projekt erstellt wurde, bearbeiten Sie die Projektdatei, um sie wieder zu 6.0 zu ändern.

  1. Wenn Sie ein neues Projekt erstellen, navigieren die Setupschritte Sie zur Setupseite Zusätzliche Informationen. Ändern Sie auf dieser Seite die Frameworkeinstellung von .NET 6.0 (langfristige Unterstützung) zu .NET 5.0, und wählen Sie dann die Schaltfläche Erstellen aus.

    Wählen Sie .NET-Framework 5.0 in Visual Studio als Ziel aus.

  2. Nachdem das Projekt erstellt wurde, suchen Sie den Bereich Projektexplorer. Doppelklicken Sie auf die Projektdatei, und ändern Sie <TargetFramework>net5.0</TargetFramework> zu <TargetFramework>net6.0</TargetFramework>.

    Hier sehen Sie einen Dateivergleich, der die Änderungen veranschaulicht:

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
    -   <TargetFramework>net5.0</TargetFramework>
    +   <TargetFramework>net6.0</TargetFramework>
      </PropertyGroup>
    
    </Project>
    

    Alternativ können Sie im bereich Projektmappen-Explorer mit der rechten Maustaste auf das Projekt klicken und Eigenschaften auswählen. Dadurch wird eine Einstellungsseite geöffnet, auf der Sie das Zielframework ändern können.

    Bearbeiten Sie die Projekteigenschaften für Visual Studio, und legen Sie die .NET Framework-Version fest.

  3. Optionaler Schritt: Sie können weiterhin einige der neueren .NET 6- und C#-Features verwenden, indem Sie der Projektdatei die Eigenschaften für implizite using-Anweisungen und Nullwerte zulassenden Kontext hinzufügen.

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
    +   <ImplicitUsings>enable</ImplicitUsings>
    +   <Nullable>enable</Nullable>
      </PropertyGroup>
    
    </Project>
    

Vorlagenfeedback

Anweisungen der obersten Ebene sind ein neues Feature in .NET 6. Stimmen Sie in GitHub-Issue #27420 ab, um uns mitzuteilen, ob Sie die Verwendung dieser Funktion in Projektvorlagen unterstützen.