Dela via


.NET-miljövariabler

Den här artikeln gäller för: ✔️ .NET Core 3.1 SDK och senare versioner

I den här artikeln får du lära dig mer om de miljövariabler som används av .NET. Vissa miljövariabler används av .NET-körningen, medan andra endast används av .NET SDK och .NET CLI. Vissa miljövariabler används av alla tre komponenterna.

Miljövariabler för .NET-körning

DOTNET_SYSTEM_NET_HTTP_*

Det finns flera globala inställningar för HTTP-miljövariabler:

  • DOTNET_SYSTEM_NET_HTTP_ENABLEACTIVITYPROPAGATION
    • Anger om du vill aktivera aktivitetsspridning för diagnostikhanteraren för globala HTTP-inställningar.
  • DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_HTTP2SUPPORT
    • När värdet är inställt på false eller 0inaktiverar du HTTP/2-stöd, vilket är aktiverat som standard.
  • DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_HTTP3SUPPORT
    • När värdet är inställt på true eller 1aktiverar du HTTP/3-stöd, vilket är inaktiverat som standard.
  • DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_HTTP2FLOWCONTROL_DISABLEDYNAMICWINDOWSIZING
    • När det är inställt på false eller 0åsidosätter du standardvärdet och inaktiverar algoritmen för dynamisk skalning av HTTP/2-fönster.
  • DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_FLOWCONTROL_MAXSTREAMWINDOWSIZE
    • Standardvärdet är 16 MB. När den åsidosätts får den maximala storleken på HTTP/2-strömmens mottagningsfönster inte vara mindre än 65 535.
  • DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_FLOWCONTROL_STREAMWINDOWSCALETHRESHOLDMULTIPLIER
    • Standardvärdet är 1.0. Vid åsidosättande resulterar högre värden i ett kortare fönster men långsammare nedladdningar. Får inte vara mindre än 0.

DOTNET_SYSTEM_GLOBALIZATION_*

  • DOTNET_SYSTEM_GLOBALIZATION_INVARIANT: Se ange invariant läge.
  • DOTNET_SYSTEM_GLOBALIZATION_PREDEFINED_CULTURES_ONLY: Anger om endast fördefinierade kulturer ska läsas in.
  • DOTNET_SYSTEM_GLOBALIZATION_APPLOCALICU: Anger om du vill använda de applokala internationella komponenterna i Unicode (ICU). Mer information finns i Applokal ICU.

Ange invariant läge

Program kan aktivera det invarianta läget på något av följande sätt:

  1. I projektfilen:

    <PropertyGroup>
        <InvariantGlobalization>true</InvariantGlobalization>
    </PropertyGroup>
    
  2. I filen runtimeconfig.json :

    {
        "runtimeOptions": {
            "configProperties": {
                "System.Globalization.Invariant": true
            }
        }
    }
    
  3. Genom att ange miljövariabelvärdet DOTNET_SYSTEM_GLOBALIZATION_INVARIANT till true eller 1.

Viktigt!

Ett värde som anges i projektfilen eller runtimeconfig.json har högre prioritet än miljövariabeln.

Mer information finns i .NET Globalisering invariant läge.

DOTNET_SYSTEM_GLOBALIZATION_USENLS

Detta gäller endast för Windows. Om du vill att globalisering ska använda National Language Support (NLS) anger du DOTNET_SYSTEM_GLOBALIZATION_USENLS till antingen true eller 1. Om du inte vill använda den anger du DOTNET_SYSTEM_GLOBALIZATION_USENLS till antingen false eller 0.

DOTNET_SYSTEM_NET_SOCKETS_*

Det här avsnittet fokuserar på två System.Net.Sockets miljövariabler:

  • DOTNET_SYSTEM_NET_SOCKETS_INLINE_COMPLETIONS
  • DOTNET_SYSTEM_NET_SOCKETS_THREAD_COUNT

Socket-fortsättningar skickas till System.Threading.ThreadPool från händelsetråden. Detta förhindrar fortsättningar som blockerar händelsehanteringen. Om du vill tillåta fortsättningar att köras direkt i händelsetråden anger du DOTNET_SYSTEM_NET_SOCKETS_INLINE_COMPLETIONS till 1. Som standard är den inaktiverad.

Kommentar

Den här inställningen kan göra prestandan sämre om det finns dyrt arbete som i slutändan håller fast vid I/O-tråden längre än nödvändigt. Testa för att se till att den här inställningen hjälper prestanda.

Med Hjälp av TechEmpower-benchmarks som genererar många små socketläsningar och skrivningar under mycket hög belastning, kan en enda socketmotor hålla upptaget upp till trettio x64 och åtta Arm64 CPU-kärnor. De allra flesta verkliga scenarier kommer aldrig att generera en så stor belastning (hundratusentals begäranden per sekund), och att ha en enda producent räcker nästan alltid. Men för att vara säker på att extrema belastningar kan hanteras kan du använda DOTNET_SYSTEM_NET_SOCKETS_THREAD_COUNT för att åsidosätta det beräknade värdet. När det inte åsidosättas används följande värde:

DOTNET_SYSTEM_NET_DISABLEIPV6

Hjälper dig att avgöra om Internet Protocol version 6 (IPv6) är inaktiverad eller inte. När det är inställt på antingen true eller 1inaktiveras IPv6 om inget annat anges i System.AppContext.

DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER

Du kan använda någon av följande mekanismer för att konfigurera en process för att använda den äldre HttpClientHandler:

Använd klassen från kod AppContext :

AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);

Växeln AppContext kan också ställas in av en konfigurationsfil. Mer information om hur du konfigurerar växlar finns i AppContext för bibliotekskonsumenter.

Samma sak kan uppnås via miljövariabeln DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER. Om du vill välja bort anger du värdet till antingen false eller 0.

Kommentar

Från och med .NET 5 är den här inställningen som ska användas HttpClientHandler inte längre tillgänglig.

DOTNET_Jit* och DOTNET_GC*

Det finns två stressrelaterade funktioner för JIT- och JIT-genererad GC-information: JIT Stress och GC Hole Stress. Dessa funktioner ger ett sätt under utvecklingen att identifiera gränsfall och mer "verkliga" scenarier utan att behöva utveckla komplexa program. Följande miljövariabler är tillgängliga:

  • DOTNET_JitStress
  • DOTNET_JitStressModeNamesOnly
  • DOTNET_GCStress

JIT-stress

Aktivering av JIT-stress kan göras på flera sätt. Ange DOTNET_JitStress till ett heltalsvärde som inte är noll för att generera olika nivåer av JIT-optimeringar baserat på en hash av metodens namn. Om du till exempel vill tillämpa alla optimeringar anger du DOTNET_JitStress=2. Ett annat sätt att aktivera JIT Stress är att ställa in DOTNET_JitStressModeNamesOnly=1 och sedan begära stresslägen, utrymmesavgränsade, i variabeln DOTNET_JitStressModeNames .

Tänk till exempel på följande:

DOTNET_JitStressModeNames=STRESS_USE_CMOV STRESS_64RSLT_MUL STRESS_LCL_FLDS

GC-hålsstress

Aktivering av GC Hole Stress gör att GCs alltid förekommer på specifika platser och som hjälper till att spåra GC-hål. GC Hole Stress kan aktiveras med hjälp av DOTNET_GCStress miljövariabeln.

Mer information finns i Undersöka JIT- och GC Hole-stress.

JIT-minnesbarriärer

Kodgeneratorn för Arm64 gör att alla MemoryBarriers instruktioner kan tas bort genom att ställa in DOTNET_JitNoMemoryBarriers1.

DOTNET_RUNNING_IN_CONTAINER och DOTNET_RUNNING_IN_CONTAINERS

De officiella .NET-avbildningarna (Windows och Linux) anger de välkända miljövariablerna:

  • DOTNET_RUNNING_IN_CONTAINER
  • DOTNET_RUNNING_IN_CONTAINERS

Dessa värden används för att avgöra när dina ASP.NET Core-arbetsbelastningar körs i kontexten för en container.

DOTNET_SYSTEM_CONSOLE_ALLOW_ANSI_COLOR_REDIRECTION

När Console.IsOutputRedirected är truekan du generera ANSI-färgkod genom att ange DOTNET_SYSTEM_CONSOLE_ALLOW_ANSI_COLOR_REDIRECTION antingen 1 eller true.

  • DOTNET_SYSTEM_DIAGNOSTICS_DEFAULTACTIVITYIDFORMATISHIERARCHIAL: När 1 eller trueär standardformatet för aktivitets-ID hierarkiskt.
  • DOTNET_SYSTEM_RUNTIME_CACHING_TRACING: När du kör som felsökning kan spårning aktiveras när detta är true.

DOTNET_DiagnosticPorts

Konfigurerar alternativa slutpunkter där diagnostikverktyg kan kommunicera med .NET-körningen. Mer information finns i dokumentationen om diagnostikporten.

DOTNET_DefaultDiagnosticPortSuspend

Konfigurerar körningen så att den pausar under starten och väntar på kommandot Diagnostics IPC ResumeStartup från den angivna diagnostikporten när den är inställd på 1. Standardvärdet är 0. Mer information finns i dokumentationen om diagnostikporten.

DOTNET_EnableDiagnostics

När inställningen är inställd 0på inaktiverar du felsökning, profilering och annan diagnostik via diagnostikporten och kan inte åsidosättas av andra diagnostikinställningar. Standardvärdet är 1.

DOTNET_EnableDiagnostics_IPC

Från och med .NET 8 inaktiveras diagnostikporten när den är inställd 0på och kan inte åsidosättas av andra diagnostikinställningar. Standardvärdet är 1.

DOTNET_EnableDiagnostics_Debugger

Om du börjar med .NET 8 inaktiveras felsökning och kan inte åsidosättas av andra diagnostikinställningar när det är inställt 0på . Standardvärdet är 1.

DOTNET_EnableDiagnostics_Profiler

Från och med .NET 8 inaktiverar profilering och kan inte åsidosättas av andra diagnostikinställningar när det är inställt på 0. Standardvärdet är 1.

EventPipe-variabler

Mer information finns i Miljövariabler för EventPipe.

  • DOTNET_EnableEventPipe: När värdet är 1inställt på aktiverar du spårning via EventPipe.
  • DOTNET_EventPipeOutputPath: Den utdatasökväg där spårningen kommer att skrivas.
  • DOTNET_EventPipeOutputStreaming: När värdet är inställt 1på aktiverar du direktuppspelning till utdatafilen medan appen körs. Som standard ackumuleras spårningsinformation i en cirkulär buffert och innehållet skrivs vid appavstängning.

Miljövariabler för .NET SDK och CLI

DOTNET_ROOT, DOTNET_ROOT(x86), , DOTNET_ROOT_X86DOTNET_ROOT_X64

Anger platsen för .NET-körningen, om de inte är installerade på standardplatsen. Standardplatsen i Windows är C:\Program Files\dotnet. Standardplatsen på macOS är /usr/local/share/dotnet. Standardplatsen för x64-körningarna i ett arm64-operativsystem är under en x64-undermapp (så C:\Program Files\dotnet\x64 på Windows och /usr/local/share/dotnet/x64 macOS. Standardplatsen för Linux varierar beroende på distributions- och avbetalningsmetod. Standardplatsen på Ubuntu 22.04 är /usr/share/dotnet (när den installeras från packages.microsoft.com) eller /usr/lib/dotnet (när den installeras från Jammy-feeden). Mer information finns i följande resurser:

Den här miljövariabeln används endast när appar körs via genererade körbara filer (apphosts). DOTNET_ROOT(x86) används i stället när du kör en 32-bitars körbar fil på ett 64-bitars operativsystem. DOTNET_ROOT_X64 används i stället när du kör en 64-bitars körbar fil på ett ARM64-operativsystem.

DOTNET_HOST_PATH

Anger den absoluta sökvägen till en dotnet värd (dotnet.exe i Windows, dotnet i Linux och macOS) som användes för att starta den process som körs dotnet för närvarande. Detta används av .NET SDK för att hjälpa verktyg som körs under .NET SDK-kommandon att se till att de använder samma dotnet körning för alla underordnade dotnet processer som de skapar under kommandots varaktighet. Verktyg och MSBuild-uppgifter i SDK som anropar binärfiler via dotnet värden förväntas uppfylla den här miljövariabeln för att säkerställa en konsekvent upplevelse.

Verktyg som anropar dotnet under ett SDK-kommando bör använda följande algoritm för att hitta den:

  • om DOTNET_HOST_PATH anges använder du det värdet direkt
  • i annat fall kan du förlita dig på dotnet systemets PATH

Kommentar

DOTNET_HOST_PATH är inte en allmän lösning för att dotnet hitta värden. Den är endast avsedd att användas av verktyg som anropas av .NET SDK.

DOTNET_LAUNCH_PROFILE

Kommandot dotnet run anger den här variabeln till den valda startprofilen.

Med följande launchSettings.json fil:

{
  "profiles": {
    "First": {
      "commandName": "Project",
    },
    "Second": {
      "commandName": "Project",
    }
  }
}

Och följande Program.cs fil:

var value = Environment.GetEnvironmentVariable("DOTNET_LAUNCH_PROFILE");
Console.WriteLine($"DOTNET_LAUNCH_PROFILE={value}");

Följande scenarier genererar utdata som visas:

  • Startprofilen har angetts och finns

    $ dotnet run --launch-profile First
    DOTNET_LAUNCH_PROFILE=First
    
  • Startprofilen har inte angetts, först en markerad

    $ dotnet run
    DOTNET_LAUNCH_PROFILE=First
    
  • Startprofilen har angetts men finns inte

    $ dotnet run --launch-profile Third
    The launch profile "Third" could not be applied.
    A launch profile with the name 'Third' doesn't exist.
    DOTNET_LAUNCH_PROFILE=
    
  • Starta utan profil

    $ dotnet run --no-launch-profile
    DOTNET_LAUNCH_PROFILE=
    

NUGET_PACKAGES

Mappen globala paket. Om den inte är inställd är den som standard ~/.nuget/packages på Unix eller %userprofile%\.nuget\packages i Windows.

DOTNET_SERVICING

Anger platsen för serviceindexet som ska användas av den delade värden när körningen läses in.

Anger om .NET-välkomst- och telemetrimeddelanden ska visas vid den första körningen. Ställ in på för att true stänga av dessa meddelanden (värden true, 1eller yes accepterade) eller inställt på att false tillåta dem (värden false, 0eller no accepterade). Om det inte anges är false standardvärdet och meddelandena visas vid den första körningen. Den här flaggan påverkar inte telemetri (se DOTNET_CLI_TELEMETRY_OPTOUT för att välja bort att skicka telemetri).

DOTNET_CLI_PERF_LOG

Anger om prestandainformation om den aktuella CLI-sessionen loggas. Aktiverad när den är inställd på 1, trueeller yes. Alternativet är inaktiverat som standard.

DOTNET_GENERATE_ASPNET_CERTIFICATE

Anger om du vill generera ett ASP.NET Core-certifikat. Standardvärdet är true, men det kan åsidosättas genom att ställa in miljövariabeln på antingen 0, falseeller no.

DOTNET_ADD_GLOBAL_TOOLS_TO_PATH

Anger om du vill lägga till globala verktyg i PATH miljövariabeln. Standardvärdet är true. Om du inte vill lägga till globala verktyg i sökvägen anger du till 0, falseeller no.

DOTNET_CLI_TELEMETRY_OPTOUT

Anger om data om .NET-verktygsanvändningen samlas in och skickas till Microsoft. Ställ in på för att true välja bort telemetrifunktionen (värden true, 1eller yes accepterade). Annars ställer du in false på för att välja telemetrifunktioner (värden false, 0eller no accepterade). Om den inte anges är false standardinställningen och telemetrifunktionen är aktiv.

DOTNET_SKIP_FIRST_TIME_EXPERIENCE

Om DOTNET_SKIP_FIRST_TIME_EXPERIENCE är inställt på trueexpanderas inte disken NuGetFallbackFolder och ett kortare välkomstmeddelande och telemetrimeddelande visas.

Kommentar

Den här miljövariabeln stöds inte längre i .NET Core 3.0 och senare. Använd DOTNET_NOLOGO som ersättning.

DOTNET_MULTILEVEL_LOOKUP

Anger om .NET-körningen, det delade ramverket eller SDK:t matchas från den globala platsen. Om den inte anges är standardvärdet 1 (logisk true). Ange värdet till 0 (logisk false) för att inte matcha från den globala platsen och ha isolerade .NET-installationer. Mer information om uppslag på flera nivåer finns i SharedFX-sökning på flera nivåer.

Kommentar

Den här miljövariabeln gäller endast för program som riktar sig till .NET 6 och tidigare versioner. Från och med .NET 7 söker .NET bara efter ramverk på en plats. Mer information finns i Sökning på flera nivåer är inaktiverad.

DOTNET_ROLL_FORWARD

Bestämmer beteendet för vidarekoppling. Mer information finns i --roll-forward alternativet för dotnet kommandot.

DOTNET_ROLL_FORWARD_TO_PRERELEASE

Om inställningen är inställd på 1 (aktiverad) aktiverar du vidarekoppling till en förhandsversion från en versionsversion. Som standard (0 - inaktiverad), när en versionsversion av .NET-körning begärs, kommer roll-forward endast att överväga installerade versionsversioner.

Mer information finns i --roll-forward alternativet för dotnet kommandot

DOTNET_ROLL_FORWARD_ON_NO_CANDIDATE_FX

Inaktiverar delversionsfördrullning framåt, om den är inställd på 0. Den här inställningen ersätts i .NET Core 3.0 av DOTNET_ROLL_FORWARD. De nya inställningarna ska användas i stället.

DOTNET_CLI_FORCE_UTF8_ENCODING

Tvingar användning av UTF-8-kodning i konsolen, även för äldre versioner av Windows 10 som inte har fullt stöd för UTF-8. Mer information finns i SDK:n ändrar inte längre konsolkodning när den är klar.

DOTNET_CLI_UI_LANGUAGE

Anger språket i CLI-användargränssnittet med hjälp av ett språkvärde, till exempel en-us. De värden som stöds är desamma som för Visual Studio. Mer information finns i avsnittet om hur du ändrar installationsspråket i installationsdokumentationen för Visual Studio. .NET Resource Manager-reglerna gäller, så du behöver inte välja en exakt matchning – du kan också välja underordnade i CultureInfo trädet. Om du till exempel ställer in den på fr-CAkommer CLI att hitta och använda översättningarna fr . Om du ställer in det på ett språk som inte stöds återgår CLI till engelska.

DOTNET_DISABLE_GUI_ERRORS

För GUI-aktiverade genererade körbara filer inaktiverar popup-dialogrutan, som normalt visas för vissa felklasser. Den skriver bara till stderr och avslutar i dessa fall.

DOTNET_ADDITIONAL_DEPS

Motsvarar CLI-alternativet --additional-deps.

DOTNET_RUNTIME_ID

Åsidosätter identifierade RID.

DOTNET_SHARED_STORE

Plats för det "delade arkivet" som sammansättningsupplösningen i vissa fall återgår till.

DOTNET_STARTUP_HOOKS

Lista över sammansättningar som ska läsas in och köra startkrokar från.

DOTNET_BUNDLE_EXTRACT_BASE_DIR

Anger en katalog som ett enfilsprogram extraheras till innan det körs.

Mer information finns i Körbara filer med en fil.

DOTNET_CLI_HOME

Anger den plats som stödfiler för .NET CLI-kommandon ska skrivas till. Till exempel:

  • Användarskrivningsbara sökvägar för arbetsbelastningspaket, manifest och andra stöddata.
  • Första körningen av sentinel-/låsfiler för aspekter av .NET CLI:s första körningsmigreringar och meddelandeupplevelser.
  • Standardinstallationsplatsen för det lokala .NET-verktyget.

DOTNET_CLI_CONTEXT_*

  • DOTNET_CLI_CONTEXT_VERBOSE: Om du vill aktivera en utförlig kontext anger du till true.
  • DOTNET_CLI_CONTEXT_ANSI_PASS_THRU: Om du vill aktivera en ANSI-genomströmning anger du till true.

DOTNET_CLI_WORKLOAD_UPDATE_NOTIFY_DISABLE

Inaktiverar bakgrundsnedladdning av reklammanifest för arbetsbelastningar. Standardvärdet är false – inte inaktiverat. Om värdet är inställt på trueinaktiveras nedladdningen. Mer information finns i Annonseringsmanifest.

DOTNET_CLI_WORKLOAD_UPDATE_NOTIFY_INTERVAL_HOURS

Anger det minsta antalet timmar mellan bakgrundsnedladdningar av reklammanifest för arbetsbelastningar. Standardvärdet är 24, som inte är oftare än en gång om dagen. Mer information finns i Annonseringsmanifest.

DOTNET_TOOLS_ALLOW_MANIFEST_IN_ROOT

Anger om lokala .NET SDK-verktyg söker efter verktygsmanifestfiler i rotmappen i Windows. Standardvärdet är false.

COREHOST_TRACE

Styr diagnostikspårning från värdkomponenterna, till exempel dotnet.exe, hostfxroch hostpolicy.

  • COREHOST_TRACE=[0/1] - standard är 0 - spårning inaktiverad. Om värdet 1är aktiverat aktiveras spårning av diagnostik.

  • COREHOST_TRACEFILE=<file path> – har bara en effekt om spårning är aktiverat genom att ange COREHOST_TRACE=1. När den anges skrivs spårningsinformationen till den angivna filen. annars skrivs spårningsinformationen till stderr.

  • COREHOST_TRACE_VERBOSITY=[1/2/3/4] – standardvärdet är 4. Inställningen används endast när spårning är aktiverat via COREHOST_TRACE=1.

    • 4 – all spårningsinformation är skriven
    • 3 – endast informations-, varnings- och felmeddelanden skrivs
    • 2 – endast varnings- och felmeddelanden skrivs
    • 1 – endast felmeddelanden skrivs

Det vanliga sättet att få detaljerad spårningsinformation om programstart är att ange COREHOST_TRACE=1 ochCOREHOST_TRACEFILE=host_trace.txt sedan köra programmet. En ny fil host_trace.txt skapas i den aktuella katalogen med detaljerad information.

SuppressNETCoreSdkPreviewMessage

Om värdet är inställt truedotnet genereras ingen varning när en förhandsversions-SDK används.

Konfigurera MSBuild i .NET CLI

Om du vill köra MSBuild out-of-process anger du DOTNET_CLI_RUN_MSBUILD_OUTOFPROC miljövariabeln till antingen 1, trueeller yes. Som standard körs MSBuild i processen. Om du vill tvinga MSBuild att använda en extern arbetsnods långvariga process för att skapa projekt anger du DOTNET_CLI_USE_MSBUILDNOINPROCNODE till 1, trueeller yes. Detta anger MSBUILDNOINPROCNODE miljövariabeln till 1, som kallas MSBuild Server V1, eftersom inmatningsprocessen vidarebefordrar det mesta av arbetet till den.

DOTNET_MSBUILD_SDK_RESOLVER_*

Det här är åsidosättningar som används för att tvinga de lösta SDK-uppgifterna och målen att komma från en viss baskatalog och rapportera en viss version till MSBuild, vilket kan vara om det är null okänt. Ett viktigt användningsfall för detta är att testa SDK-uppgifter och mål utan att distribuera dem med hjälp av .NET Core SDK.

  • DOTNET_MSBUILD_SDK_RESOLVER_SDKS_DIR: Åsidosätter .NET SDK-katalogen.
  • DOTNET_MSBUILD_SDK_RESOLVER_SDKS_VER: Åsidosätter .NET SDK-versionen.
  • DOTNET_MSBUILD_SDK_RESOLVER_CLI_DIR: Åsidosätter dotnet.exe katalogsökväg.

DOTNET_NEW_PREFERRED_LANG

Konfigurerar standardprogrammeringsspråket dotnet new för kommandot när växeln -lang|--language utelämnas. Standardvärdet är C#. Giltiga värden är C#, F#eller VB. Mer information finns i dotnet new.

dotnet watch Miljövariabler

Information om dotnet watch inställningar som är tillgängliga som miljövariabler finns i miljövariabler för dotnet watch.

Se även