Pergunta

Criar um novo appdomain, configuração o manipulador AssemblyResolve e você sempre terá uma exceção dizendo 'montagem [atual execução de montagem] não encontrado'

que dá? código está abaixo

string _fileName = @"c:\temp\abc123.dll";

AppDomain sandBox = AppDomain.CreateDomain("sandbox");

sandBox.AssemblyResolve += new ResolveEventHandler(sandBox_AssemblyResolve); 
// the line generates the exception !

System.Reflection.Assembly asm = sandBox.Load(System.Reflection.AssemblyName
                                     .GetAssemblyName(fileName).FullName);

foreach (System.Reflection.AssemblyName ar in asm.GetReferencedAssemblies())
    dbgWrite("Ref:  " + ar.FullName );


System.Reflection.Assembly sandBox_AssemblyResolve
  (object sender, ResolveEventArgs e)
{

    System.Reflection.Assembly asm = 
        System.Reflection.Assembly.LoadFrom(_fileName);
    return asm;

}

exceção é:

System.IO.FileNotFoundException: não foi possível carregar arquivo ou assembly 'AppAdmin, versão = 1.0.0.0, Culture = neutral, PublicKeyToken = null' ou uma de suas dependências. O sistema não pode encontrar o arquivo especificado. O nome do arquivo: 'AppAdmin, versão = 1.0.0.0, Culture = neutral, PublicKeyToken = null' [snip]

Foi útil?

Solução

O seu resolvedor não pode fogo em seu novo AppDomain, tente defini-lo sobre a AppDomain.CurrentAppDomain vez.

AppDomain.CurrentDomain.AssemblyResolve + = novo ResolveEventHandler (sandBox_AssemblyResolve);

No método sandBox_AssemblyResolve você pode carregar o conjunto para cima de qualquer diretórios que quiser, este é o lugar onde a carga de um byte [] podem entrar em jogo.

Como para o carregamento de uma montagem usando byte [] este arquivo corrige problemas de bloqueio, não vai consertar o que aflige você eu não acho que ver aqui

Outras dicas

Você está tentando carregar os conjuntos que não estão sob local de base do AppDomain. Eu nunca tive o trabalho evento AssemblyResolve para mim, também.

Eu sugiro carregar o out-of-base de montagem em um array de bytes (System.IO.File.ReadAllBytes) e, em seguida, entregar essa matriz para o seu recém-criado AppDomain para carregar .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top