Dela via


Så här felsöker du PROBLEM med CLR-aktivering

Kommentar

Den här artikeln är specifik för .NET Framework. Det gäller inte för nyare implementeringar av .NET, inklusive .NET 6 och senare versioner.

Om du stöter på problem med att få programmet att köras med rätt version av CLR (Common Language Runtime) kan du visa och felsöka CLR-aktiveringsloggar. Dessa loggar kan vara mycket användbara för att fastställa rotorsaken till ett aktiveringsproblem, när ditt program antingen läser in en annan CLR-version än förväntat eller inte läser in CLR alls. .NET Framework-initieringsfel: Hantering av användarupplevelsen beskriver upplevelsen när ingen CLR hittas för ett program.

CLR-aktiveringsloggning kan aktiveras systemomfattande med hjälp av en HKEY_LOCAL_MACHINE registernyckel eller en systemmiljövariabel. Loggen genereras tills registerposten eller miljövariabeln har tagits bort. Du kan också använda en användar- eller processlokal miljövariabel för att aktivera loggning med ett annat omfång och varaktighet.

CLR-aktiveringsloggar bör inte förväxlas med sammansättningsbindningsloggar, som är helt olika.

Aktivera CLR-aktiveringsloggning

Använda registret

  1. I Registereditorn navigerar du till HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\. NETFramework (på en 32-bitars dator) eller HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\. NETFramework-mapp (på en 64-bitars dator).

  2. Lägg till ett strängvärde med namnet CLRLoadLogDiroch ange det till den fullständiga sökvägen till en befintlig katalog där du vill lagra CLR-aktiveringsloggar.

Aktiveringsloggning förblir aktiverad tills du tar bort strängvärdet.

Använda en miljövariabel

  • COMPLUS_CLRLoadLogDir Ange miljövariabeln till en sträng som representerar den fullständiga sökvägen till en befintlig katalog där du vill lagra CLR-aktiveringsloggar.

    Hur du anger miljövariabeln avgör dess omfång:

    • Om du ställer in den på systemnivå aktiveras aktiveringsloggning för alla .NET Framework-program på datorn tills miljövariabeln har tagits bort.

    • Om du anger den på användarnivå aktiveras aktiveringsloggning endast för det aktuella användarkontot. Loggningen fortsätter tills miljövariabeln har tagits bort.

    • Om du ställer in den inifrån processen innan du läser in CLR aktiveras aktiveringsloggning tills processen avslutas.

    • Om du ställer in den i en kommandotolk innan du kör ett program aktiveras aktiveringsloggning för alla program som körs från kommandotolken.

      Om du till exempel vill lagra aktiveringsloggar i katalogen c:\clrloadlogs med omfång på processnivå öppnar du ett kommandotolksfönster och skriver följande innan du kör programmet:

      set COMPLUS_CLRLoadLogDir=c:\clrloadlogs
      

Exempel

CLR-aktiveringsloggar ger en stor mängd data om CLR-aktivering och användning av CLR-värd-API:er. De flesta av dessa data används internt av Microsoft, men vissa data kan också vara användbara för utvecklare, enligt beskrivningen i den här artikeln.

Loggen visar i vilken ordning CLR-värd-API:erna anropades. Den innehåller också användbara data om den uppsättning installerade körningar som identifierats på datorn. CLR-aktiveringsloggformatet är inte i sig dokumenterat, men kan användas för att hjälpa utvecklare som behöver lösa CLR-aktiveringsproblem.

Kommentar

Du kan inte öppna en aktiveringslogg förrän processen som använder CLR har avslutats.

Kommentar

CLR-aktiveringsloggar är inte lokaliserade. de genereras alltid på engelska.

I följande exempel på en aktiveringslogg är den mest användbara informationen markerad och beskrivs efter loggen.

532,205950.367,CLR Loading log for C:\Tests\myapp.exe
532,205950.367,Log started at 4:26:12 PM on 10/6/2011
532,205950.367,-----------------------------------
532,205950.382,FunctionCall: _CorExeMain
532,205950.382,FunctionCall: ClrCreateInstance, Clsid: {2EBCD49A-1B47-4A61-B13A-4A03701E594B}, Iid: {E2190695-77B2-492E-8E14-C4B3A7FDD593}
532,205950.382,MethodCall: ICLRMetaHostPolicy::GetRequestedRuntime. Version: (null), Metahost Policy Flags: 0x168, Binary: (null), Iid: {BD39D1D2-BA2F-486A-89B0-B4B0CB466891}
532,205950.382,Installed Runtime: v4.0.30319. VERSION_ARCHITECTURE: 0
532,205950.382,Input values for ComputeVersionString follow this line
532,205950.382,-----------------------------------
532,205950.382,Default Application Name: C:\Tests\myapp.exe
532,205950.382,IsLegacyBind is: 0
532,205950.382,IsCapped is 0
532,205950.382,SkuCheckFlags are 0
532,205950.382,ShouldEmulateExeLaunch is 0
532,205950.382,LegacyBindRequired is 0
532,205950.382,-----------------------------------
532,205950.382,Parsing config file: C:\Tests\myapp.exe
532,205950.382,UseLegacyV2RuntimeActivationPolicy is set to 0
532,205950.382,LegacyFunctionCall: GetFileVersion. Filename: C:\Tests\myapp.exe
532,205950.382,LegacyFunctionCall: GetFileVersion. Filename: C:\Tests\myapp.exe
532,205950.382,C:\Tests\myapp.exe was built with version: v2.0.50727
532,205950.382,ERROR: Version v2.0.50727 is not present on the machine.
532,205950.398,SEM_FAILCRITICALERRORS is set to 0
532,205950.398,Launching feature-on-demand installation. CmdLine: C:\Windows\system32\fondue.exe /enable-feature:NetFx3
532,205950.398,FunctionCall: RealDllMain. Reason: 0
532,205950.398,FunctionCall: OnShimDllMainCalled. Reason: 0
  • CLR-inläsningsloggen innehåller sökvägen till den körbara fil som startade processen som läste in hanterad kod. Observera att detta kan vara en intern värd.

    532,205950.367,CLR Loading log for C:\Tests\myapp.exe
    
  • Installerad Körning är den uppsättning CLR-versioner som är installerade på den dator som är kandidater för aktiveringsbegäran.

    532,205950.382,Installed Runtime: v4.0.30319. VERSION_ARCHITECTURE: 0
    
  • byggd med version är den version av CLR som användes för att skapa binärfilen som tillhandahölls till en metod som ICLRMetaHostPolicy::GetRequestedRuntime.

    532,205950.382,C:\Tests\myapp.exe was built with version: v2.0.50727
    
  • installation av funktionen på begäran syftar på att aktivera .NET Framework 3.5 på Windows 8. Mer information om det här scenariot finns i Initieringsfel för .NET Framework: Hantera användarupplevelsen .

    532,205950.398,Launching feature-on-demand installation. CmdLine: C:\Windows\system32\fondue.exe /enable-feature:NetFx3
    

Se även