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!");

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 inkludera de andra programelementen. kompilatorn genererar dem åt dig. Mer information om koden som kompilatorn genererar när du använder toppnivåinstruktioner finns i topnivåinstruktioner i avsnittet grunderna i C#-guiden.

När du arbetar med handledningar som inte har uppdaterats för att använda .NET 6+ mallar, använder du ett av de två följande alternativen:

  • 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ända det gamla programformatet senare i den här artikeln.

Använd det nya programformatet

De funktioner som gör det nya programmet enklare är instruktioner på toppnivå, globala using direktiv och implicita using direktiv.

Termen toppnivåinstruktioner innebär att kompilatorn genererar klass- och metodelementen för huvudprogrammet. Kompilatorn deklarerar den genererade klassen och startpunktsmetoden i det globala namnområdet. Titta på koden för det nya programmet och föreställ dig att den innehåller satserna i metoden Main som genererats av tidigare mallar, men de är placerade i globalt namnområde.

Lägg till fler instruktioner i programmet, precis som du lägger till instruktioner i din Main metod i traditionell stil. Åtkomst args (kommandoradsargument), använd awaitoch ange slutkoden. Du kan till och med lägga till funktioner. Kompilatorn skapar dem 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örenklar koden som utgör ditt program. Om du vill följa en befintlig handledning lägger du till nya instruktioner i Program.cs-filen som genereras av mallen. Tänk dig att de satser du skriver är mellan de öppna och avslutande klammerparenteserna i Main metoden i handledningens instruktioner.

Om du föredrar det äldre formatet kopierar du koden från det andra exemplet i den här artikeln och fortsätter självstudien som tidigare.

Mer information om toppnivåinstruktioner finns i självstudiekursen om toppnivåinstruktioner.

Implicita using direktiv

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 lägger du till dem i den .cs fil 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änder du 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 -elementet <PropertyGroup> , 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. Lägg till dessa globala direktiv genom att inkludera ett <Using> objekt i projektfilen eller lägga till direktivet i global using en kodfil.

Om du vill ta bort ett specifikt implicit using direktiv lägger du till ett <Using> objekt med ett Remove attribut i projektfilen. Om funktionen med implicita using direktiv till exempel är aktiverad med <ImplicitUsings>enable</ImplicitUsings>, tar du bort namnområdet <Using> från de som implicit importeras genom att lägga till följande System.Net.Http objekt:

<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 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änd det gamla programformatet i Visual Studio

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

    Visual Studio använd inte kryssrutan för top-level statements

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

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

Anteckning

Visual Studio bevarar alternativvärdet för nästa gång du skapar ett projekt baserat på samma mall. Om du senast skapade ett konsolappsprojekt med kryssrutan Använd inte toppnivåinstruktioner markerad markeras det alternativet när du skapar nästa konsolappprojekt. Innehållet i filen Program.cs kan skilja sig från kodformatet som definierats i inställningarna för den globala Visual Studio textredigeraren eller filen EditorConfig.

Mer information finns i Skapa portabla anpassade redigeringsinställningar med EditorConfig och Alternativ, Textredigeraren, C#, Avancerat.