Por que AppDomain.CurrentDomain.GetAssemblies () não retorna assemblies dependentes no Global.asax sob certas condições?

EDITAR: Anteriormente, isso era intitulado "O comportamento do App Init é diferente entre a reinicialização do IIS e a inicialização do aplicativo". Eu mudei o título para expandir a questão do IIS / Application Initialization porque o comportamento observado se relaciona comAppDomain.CurrentDomain.GetAssemblies();

Eu estou usando o módulo IIS Application Initialisation para aquecer um serviço asmx wed.

Implementei um código de aquecimento para garantir que a inicialização do aplicativo de aplicativo seja bem-sucedida no serviço my asmx do JIT no evento Global.asax Application_Start. Isso usa System.Runtime.CompilerServices.RuntimeHelpers.PrepareMethod () para percorrer todos os assemblies no aplicativo (ele também seleciona todas as dependências de assembly) para garantir que a primeira chamada para o serviço seja o mais rápida possível.

Quando eu obtenho esse comportamento utilizando "net stop w3svc e net start w3svc" eu posso ver (via logging) que TODOS os assemblies são JIT'ted e a primeira chamada para o serviço é rápida como esperado.

No entanto, quando o pool de aplicativos é automaticamente reciclado em seu agendamento de horário configurado (03:00:00), o log mostra apenas que os assemblies diretamente referenciados são JIT, não as dependências que também estão na pasta.

Isso está resultando em uma sobrecarga inaceitável na primeira chamada para o serviço.

O App Init executa exatamente como esperado em todos os outros aspectos, mas por que a reciclar do IIS do pool de aplicativos somente JIT compila os assemblies referenciados diretamente e não suas dependências?

questionAnswers(1)

yourAnswerToTheQuestion