Partilhar via


Como depurar problemas de ativação CLR

Nota

Este artigo é específico do .NET Framework. Ele não se aplica a implementações mais recentes do .NET, incluindo o .NET 6 e versões posteriores.

Se você encontrar problemas para fazer seu aplicativo ser executado com a versão correta do Common Language Runtime (CLR), poderá exibir e depurar os logs de ativação do CLR. Esses logs podem ser muito úteis para determinar a causa raiz de um problema de ativação, quando seu aplicativo carrega uma versão CLR diferente do esperado ou não carrega o CLR. Os erros de inicialização do .NET Framework: gerenciando a experiência do usuário discute a experiência quando nenhum CLR é encontrado para um aplicativo.

O log de ativação CLR pode ser habilitado em todo o sistema usando uma chave do Registro HKEY_LOCAL_MACHINE ou uma variável de ambiente do sistema. O log será gerado até que a entrada do Registro ou a variável de ambiente seja removida. Como alternativa, você pode usar uma variável de ambiente local de processo ou usuário para habilitar o registro em log com um escopo e duração diferentes.

Os logs de ativação CLR não devem ser confundidos com os logs de vinculação de montagem, que são totalmente diferentes.

Para habilitar o log de ativação do CLR

Utilizar o registo

  1. No Editor do Registro, navegue até HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\. NETFramework (em um computador de 32 bits) ou HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\. NETFramework pasta (em um computador de 64 bits).

  2. Adicione um valor de cadeia de caracteres chamado CLRLoadLogDir, e defina-o para o caminho completo de um diretório existente onde você gostaria de armazenar logs de ativação CLR.

O log de ativação permanece habilitado até que você remova o valor da cadeia de caracteres.

Usando uma variável de ambiente

  • Defina a COMPLUS_CLRLoadLogDir variável de ambiente como uma cadeia de caracteres que representa o caminho completo de um diretório existente onde você gostaria de armazenar logs de ativação CLR.

    A forma como você define a variável de ambiente determina seu escopo:

    • Se você defini-lo no nível do sistema, o log de ativação será habilitado para todos os aplicativos do .NET Framework nesse computador até que a variável de ambiente seja removida.

    • Se você defini-lo no nível do usuário, o log de ativação será habilitado apenas para a conta de usuário atual. O registro em log continua até que a variável de ambiente seja removida.

    • Se você defini-lo de dentro do processo antes de carregar o CLR, o log de ativação será habilitado até que o processo seja encerrado.

    • Se você defini-lo em um prompt de comando antes de executar um aplicativo, o log de ativação será habilitado para qualquer aplicativo executado a partir desse prompt de comando.

      Por exemplo, para armazenar logs de ativação no diretório c:\clrloadlogs com escopo no nível do processo, abra uma janela do Prompt de Comando e digite o seguinte antes de executar o aplicativo:

      set COMPLUS_CLRLoadLogDir=c:\clrloadlogs
      

Exemplo

Os logs de ativação CLR fornecem uma grande quantidade de dados sobre a ativação CLR e o uso das APIs de hospedagem CLR. A maioria desses dados é usada internamente pela Microsoft, mas alguns dos dados também podem ser úteis para desenvolvedores, conforme descrito neste artigo.

O log reflete a ordem na qual as APIs de hospedagem CLR foram chamadas. Ele também inclui dados úteis sobre o conjunto de tempos de execução instalados detetados no computador. O formato de log de ativação do CLR não é documentado, mas pode ser usado para ajudar os desenvolvedores que precisam resolver problemas de ativação do CLR.

Nota

Não é possível abrir um log de ativação até que o processo que usa o CLR tenha terminado.

Nota

Os logs de ativação CLR não estão localizados; eles são sempre gerados na língua inglesa.

No exemplo a seguir de um log de ativação, as informações mais úteis são destacadas e descritas após o log.

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
  • O log de carregamento CLR fornece o caminho para o executável que iniciou o processo que carregou o código gerenciado. Observe que este pode ser um host nativo.

    532,205950.367,CLR Loading log for C:\Tests\myapp.exe
    
  • Installed Runtime é o conjunto de versões CLR instaladas no computador que são candidatas para a solicitação de ativação.

    532,205950.382,Installed Runtime: v4.0.30319. VERSION_ARCHITECTURE: 0
    
  • built with version é a versão do CLR que foi usada para criar o binário que foi fornecido para um método como ICLRMetaHostPolicy::GetRequestedRuntime.

    532,205950.382,C:\Tests\myapp.exe was built with version: v2.0.50727
    
  • instalação de recurso sob demanda refere-se à habilitação do .NET Framework 3.5 no Windows 8. Consulte Erros de inicialização do .NET Framework: gerenciando a experiência do usuário para obter mais informações sobre esse cenário.

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

Consulte também