Dela via


C#-konsolappmallen genererar toppnivåinstruktioner

Från och med .NET 6 genererar projektmallen för nya C#-konsolappar följande kod i filen Program.cs:

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

De nya utdata använder de senaste C#-funktionerna som förenklar koden du behöver skriva för ett program. För .NET 5 och tidigare versioner genererar konsolappmallen följande kod:

using System;

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

I föregående kod beror det faktiska namnområdet på projektnamnet.

Dessa två formulär representerar samma program. Båda är giltiga i C#. När du använder den nyare versionen behöver du bara skriva brödtexten för metoden Main. Kompilatorn genererar en Program-klass med en startpunktsmetod och placerar alla dina toppnivåinstruktioner i den metoden. Namnet på den genererade metoden är inte Main, det är en implementeringsinformation som koden inte kan referera direkt till. Du behöver inte ta med de andra programelementen. Kompilatorn genererar dem åt dig. Du kan lära dig mer om koden som kompilatorn genererar när du använder toppnivåinstruktioner i artikeln om toppnivåinstruktioner i avsnittet grunderna i C#-guiden.

Du har två alternativ för att arbeta med handledningar som inte uppdaterats för att använda .NET 6+-mallar.

  • Använd det nya programformatet och lägg till nya toppnivåinstruktioner när du lägger till funktioner.
  • Konvertera det nya programformatet till det äldre formatet med en Program-klass och en Main-metod.

Om du vill använda de gamla mallarna kan du läsa Använd det gamla programformatet senare i den här artikeln.

Använd det nya programformatet

De funktioner som gör det nya programmet enklare är toppnivåuttryck, globala using direktivoch implicita using direktiv.

Termen toppnivåinstruktioner innebär att kompilatorn genererar klass- och metodelementen för huvudprogrammet. Den kompilatorgenererade klassen och startpunktsmetoden deklareras i det globala namnområdet. Du kan titta på koden för det nya programmet och föreställa dig att den innehåller instruktionerna i Main-metoden som genererades av tidigare mallar, men i den globala namnrymden.

Du kan lägga till fler instruktioner i programmet, precis som du kan lägga till fler instruktioner i din Main-metod i traditionellt format. Du kan få åtkomst till args (kommandoradsargument), använda awaitoch ange avslutningskoden. Du kan till och med lägga till funktioner. De skapas som lokala funktioner kapslade i den genererade startpunktsmetoden. Lokala funktioner kan inte innehålla några åtkomstmodifierare (till exempel public eller protected).

Både toppnivåinstruktioner och implicita using direktiv förenkla koden som utgör ditt program. Om du vill följa en befintlig självstudie lägger du till nya instruktioner i den Program.cs fil som genereras av mallen. Du kan tänka dig att de instruktioner du skriver är mellan de öppna och avslutande klammerparenteserna i metoden Main i instruktionerna i självstudien.

Om du föredrar att använda det äldre formatet kan du kopiera koden från det andra exemplet i den här artikeln och fortsätta självstudien som tidigare.

Du kan lära dig mer om toppnivåinstruktioner i självstudiekursen för utforskning av toppnivåinstruktioner.

Implicita using-direktiven

Termen implicita using direktiv innebär att kompilatorn automatiskt lägger till en uppsättning using direktiv baserat på projekttypen. För konsolprogram ingår följande direktiv implicit i programmet:

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

Andra programtyper innehåller fler namnområden som är vanliga för dessa programtyper.

Om du behöver using direktiv som inte ingår implicit kan du lägga till dem i .cs-filen som innehåller instruktioner på den översta nivån eller till andra .cs filer. För using direktiv som du behöver i alla .cs-filer i ett program, använd globala using direktiv.

Inaktivera implicita using direktiv

Om du vill ta bort det här beteendet och manuellt styra alla namnområden i projektet lägger du till <ImplicitUsings>disable</ImplicitUsings> i projektfilen i <PropertyGroup>-elementet, som du ser i följande exempel:

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

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

</Project>

Globala using direktiv

Ett globalt using-direktiv importerar ett namnområde för hela programmet i stället för en enda fil. Dessa globala direktiv kan läggas till antingen genom att lägga till ett <Using> objekt i projektfilen eller genom att lägga till global using-direktivet i en kodfil.

Du kan också lägga till ett <Using> objekt med ett Remove attribut i projektfilen för att ta bort ett specifikt implicit using direktiv. Till exempel, om den implicita using-direktivfunktionen är aktiverad med <ImplicitUsings>enable</ImplicitUsings>, så tar följande <Using>-objekt bort System.Net.Http-namnområdet från dem som implicit importeras:

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

Använd det gamla programformatet

Från och med .NET SDK 6.0.300 har mallen console ett --use-program-main alternativ. Använd det för att skapa ett konsolprojekt som inte använder toppnivåinstruktioner och som har en Main-metod.

dotnet new console --use-program-main

Den genererade Program.cs är följande:

namespace MyProject;

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

Använda det gamla programformatet i Visual Studio

  1. När du skapar ett nytt projekt navigeras du genom installationsstegen till konfigurationssidan Ytterligare information. På den här sidan markerar du kryssrutan Använd inte instruktioner på den översta nivån.

    Avmarkera

  2. När projektet har skapats är Program.cs innehåll följande:

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

Anteckning

Visual Studio bevarar värdet för alternativen nästa gång du skapar projektet baserat på samma mall, så som standard när du skapar Console App-projekt nästa gång kryssrutan "Använd inte toppnivåinstruktioner" markeras. Innehållet i den Program.cs filen kan skilja sig åt för att matcha kodformatet som definierats i de globala inställningarna för Visual Studio-textredigeraren eller EditorConfig filen.

För mer information, se Skapa bärbara, anpassade redigerarinställningar med EditorConfig och Alternativ, Textredigerare, C#, Avancerat.