Jak debugować problemy z aktywacją środowiska CLR
Uwaga
Ten artykuł jest specyficzny dla programu .NET Framework. Nie ma zastosowania do nowszych implementacji platformy .NET, w tym .NET 6 i nowszych wersji.
Jeśli wystąpią problemy podczas uruchamiania aplikacji z poprawną wersją środowiska uruchomieniowego języka wspólnego (CLR), możesz wyświetlić i debugować dzienniki aktywacji środowiska CLR. Te dzienniki mogą być bardzo przydatne podczas określania głównej przyczyny problemu z aktywacją, gdy aplikacja ładuje inną wersję środowiska CLR niż oczekiwano lub w ogóle nie ładuje środowiska CLR. Błędy inicjowania programu .NET Framework: Zarządzanie środowiskiem użytkownika omawia środowisko, gdy nie znaleziono środowiska CLR dla aplikacji.
Rejestrowanie aktywacji CLR można włączyć w całym systemie przy użyciu klucza rejestru HKEY_LOCAL_MACHINE lub zmiennej środowiskowej systemu. Dziennik zostanie wygenerowany do momentu usunięcia wpisu rejestru lub zmiennej środowiskowej. Alternatywnie możesz użyć zmiennej środowiskowej user lub process-local, aby włączyć rejestrowanie z innym zakresem i czasem trwania.
Dzienniki aktywacji CLR nie powinny być mylone z dziennikami powiązań zestawów, które są zupełnie inne.
Aby włączyć rejestrowanie aktywacji CLR
Korzystanie z rejestru
W Edytorze rejestru przejdź do HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\. NETFramework (na komputerze 32-bitowym) lub HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\. Folder NETFramework (na komputerze 64-bitowym).
Dodaj wartość ciągu o nazwie
CLRLoadLogDir
i ustaw ją na pełną ścieżkę istniejącego katalogu, w którym chcesz przechowywać dzienniki aktywacji CLR.
Rejestrowanie aktywacji pozostaje włączone do momentu usunięcia wartości ciągu.
Używanie zmiennej środowiskowej
COMPLUS_CLRLoadLogDir
Ustaw zmienną środowiskową na ciąg reprezentujący pełną ścieżkę istniejącego katalogu, w którym chcesz przechowywać dzienniki aktywacji CLR.Sposób ustawiania zmiennej środowiskowej określa jej zakres:
Jeśli ustawisz go na poziomie systemu, rejestrowanie aktywacji jest włączone dla wszystkich aplikacji .NET Framework na tym komputerze do momentu usunięcia zmiennej środowiskowej.
Jeśli ustawisz go na poziomie użytkownika, rejestrowanie aktywacji jest włączone tylko dla bieżącego konta użytkownika. Rejestrowanie będzie kontynuowane do momentu usunięcia zmiennej środowiskowej.
Jeśli ustawisz go z poziomu procesu przed załadowaniem środowiska CLR, rejestrowanie aktywacji zostanie włączone do momentu zakończenia procesu.
Jeśli ustawisz go w wierszu polecenia przed uruchomieniem aplikacji, rejestrowanie aktywacji jest włączone dla każdej aplikacji uruchamianej z tego wiersza polecenia.
Aby na przykład przechowywać dzienniki aktywacji w katalogu c:\clrloadlogs z zakresem poziomu procesu, otwórz okno wiersza polecenia i wpisz następujące polecenie przed uruchomieniem aplikacji:
set COMPLUS_CLRLoadLogDir=c:\clrloadlogs
Przykład
Dzienniki aktywacji ŚRODOWISKA CLR zapewniają dużą ilość danych dotyczących aktywacji środowiska CLR i korzystania z interfejsów API hostingu CLR. Większość tych danych jest używana wewnętrznie przez firmę Microsoft, ale niektóre dane mogą być również przydatne dla deweloperów, zgodnie z opisem w tym artykule.
Dziennik odzwierciedla kolejność wywoływanych interfejsów API hostowania środowiska CLR. Zawiera również przydatne dane dotyczące zestawu zainstalowanych środowisk uruchomieniowych wykrytych na komputerze. Format dziennika aktywacji CLR nie jest udokumentowany, ale może służyć do pomocy deweloperom, którzy muszą rozwiązać problemy z aktywacją CLR.
Uwaga
Nie można otworzyć dziennika aktywacji, dopóki proces korzystający z środowiska CLR nie zostanie zakończony.
Uwaga
Dzienniki aktywacji CLR nie są zlokalizowane; są one zawsze generowane w języku angielskim.
W poniższym przykładzie dziennika aktywacji najbardziej przydatne informacje są wyróżnione i opisane po dzienniku.
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
Dziennik ładowania ŚRODOWISKA CLR zawiera ścieżkę do pliku wykonywalnego, który rozpoczął proces, w ramach którego załadowano kod zarządzany. Należy pamiętać, że może to być host natywny.
532,205950.367,CLR Loading log for C:\Tests\myapp.exe
Zainstalowane środowisko uruchomieniowe to zestaw wersji środowiska CLR zainstalowanych na komputerze, które są kandydatami do żądania aktywacji.
532,205950.382,Installed Runtime: v4.0.30319. VERSION_ARCHITECTURE: 0
skompilowana przy użyciu wersji to wersja środowiska CLR, która została użyta do skompilowania pliku binarnego dostarczonego do metody, takiej jak ICLRMetaHostPolicy::GetRequestedRuntime.
532,205950.382,C:\Tests\myapp.exe was built with version: v2.0.50727
Instalacja funkcji na żądanie dotyczy włączania programu .NET Framework 3.5 w systemie Windows 8. Aby uzyskać więcej informacji na temat tego scenariusza, zobacz Błędy inicjowania programu .NET Framework: Zarządzanie środowiskiem użytkownika.
532,205950.398,Launching feature-on-demand installation. CmdLine: C:\Windows\system32\fondue.exe /enable-feature:NetFx3