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
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).
Lägg till ett strängvärde med namnet
CLRLoadLogDir
och 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