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
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).
Přidejte řetězcovou hodnotu s názvem
CLRLoadLogDir
a 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