Sdílet prostřednictvím


Ladění problémů s aktivací CLR

Poznámka:

Tento článek je specifický pro rozhraní .NET Framework. Nevztahuje se na novější implementace .NET, včetně .NET 6 a novějších verzí.

Pokud narazíte na problémy se spuštěním aplikace se správnou verzí modulu CLR (Common Language Runtime), můžete zobrazit a ladit protokoly aktivace CLR. Tyto protokoly můžou být velmi užitečné při určování původní příčiny problému s aktivací, když vaše aplikace buď načte jinou verzi CLR, než se čekalo, nebo vůbec nenačte CLR. Chyby inicializace rozhraní .NET Framework: Správa uživatelského prostředí popisuje prostředí , když se pro aplikaci nenajde žádný modul CLR.

Protokolování aktivace CLR je možné povolit v celém systému pomocí klíče registru HKEY_LOCAL_MACHINE nebo systémové proměnné prostředí. Protokol se vygeneruje, dokud se neodebere položka registru nebo proměnná prostředí. Případně můžete použít proměnnou místního prostředí uživatele nebo procesu a povolit protokolování s jiným oborem a dobou trvání.

Protokoly aktivace CLR by se neměly zaměňovat s protokoly vazby sestavení, které jsou zcela odlišné.

Povolení protokolování aktivace CLR

Použití registru

  1. V Editoru registru přejděte na HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\. NETFramework (na 32bitovém počítači) nebo HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\. NETFramework složka (na 64bitovém počítači).

  2. Přidejte řetězcovou hodnotu s názvem CLRLoadLogDira nastavte ji na úplnou cestu existujícího adresáře, do kterého chcete ukládat protokoly aktivace CLR.

Protokolování aktivace zůstane povolené, dokud neodeberete hodnotu řetězce.

Použití proměnné prostředí

  • COMPLUS_CLRLoadLogDir Nastavte proměnnou prostředí na řetězec, který představuje úplnou cestu existujícího adresáře, do kterého chcete ukládat aktivační protokoly CLR.

    Jak nastavíte proměnnou prostředí, určuje její obor:

    • Pokud ji nastavíte na úrovni systému, povolí se protokolování aktivace pro všechny aplikace rozhraní .NET Framework v tomto počítači, dokud se proměnná prostředí neodebere.

    • Pokud ho nastavíte na úrovni uživatele, povolí se protokolování aktivace jenom pro aktuální uživatelský účet. Protokolování pokračuje, dokud se neodebere proměnná prostředí.

    • Pokud ho nastavíte z procesu před načtením modulu CLR, bude protokolování aktivace povolené, dokud se proces neukončí.

    • Pokud ji nastavíte na příkazovém řádku před spuštěním aplikace, povolí se protokolování aktivace pro všechny aplikace, které se spouští z příkazového řádku.

      Pokud chcete například ukládat protokoly aktivace do adresáře c:\clrloadlogs s oborem na úrovni procesu, otevřete okno příkazového řádku a před spuštěním aplikace zadejte následující:

      set COMPLUS_CLRLoadLogDir=c:\clrloadlogs
      

Příklad

Protokoly aktivace CLR poskytují velké množství dat o aktivaci CLR a použití rozhraní API pro hostování CLR. Většinu těchto dat interně používá Microsoft, ale některá data mohou být užitečná i pro vývojáře, jak je popsáno v tomto článku.

Protokol odráží pořadí, ve kterém byla volána rozhraní API pro hostování CLR. Obsahuje také užitečná data o sadě nainstalovaných modulů runtime zjištěných v počítači. Formát protokolu aktivace CLR není sám o sobě zdokumentovaný, ale dá se použít k podpoře vývojářů, kteří potřebují vyřešit problémy s aktivací CLR.

Poznámka:

Aktivační protokol nelze otevřít, dokud se proces, který používá CLR, nedokončil.

Poznámka:

Aktivační protokoly CLR nejsou lokalizovány; jsou vždy generovány v anglickém jazyce.

V následujícím příkladu aktivačního protokolu jsou nejužitečnější informace zvýrazněné a popsané po protokolu.

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
  • Protokol CLR Loading poskytuje cestu ke spustitelnému souboru, který spustil proces, který načetl spravovaný kód. Všimněte si, že se jedná o nativního hostitele.

    532,205950.367,CLR Loading log for C:\Tests\myapp.exe
    
  • Nainstalovaný modul runtime je sada verzí CLR nainstalovaných v počítači, které jsou kandidáty na žádost o aktivaci.

    532,205950.382,Installed Runtime: v4.0.30319. VERSION_ARCHITECTURE: 0
    
  • build with version is the version of the CLR that was used to build the binary that was provided to a method such as ICLRMetaHostPolicy::GetRequestedRuntime.

    532,205950.382,C:\Tests\myapp.exe was built with version: v2.0.50727
    
  • Instalace funkcí na vyžádání odkazuje na povolení rozhraní .NET Framework 3.5 ve Windows 8. Další informace o tomto scénáři najdete v tématu Chyby inicializace rozhraní .NET Framework: Správa uživatelského prostředí .

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

Viz také