Carregar um assembly / módulo em uma montagem dinâmica
-
13-12-2019 - |
Pergunta
Eu tenho um assembly criado já, dizer Static.dll
, e uma montagem dinâmica que eu estou criando em tempo de execução, dizer Dynamic
. Dynamic
cria alguns IL código para criar um novo tipo de Static.dll
.Quando Dynamic
é criado (ele salva com êxito), o executável, quando correu, erros porque não é possível carregar o assembly Static.dll
escreva.Eu acredito que isso está acontecendo desde o Dynamic
exe saída não pode encontrar essa dll (ou pelo menos esse é o meu palpite).
Como pode realizar a adição deste Static.dll
referência, de modo que, quando alguém executa o executável resultante de saída de Dynamic
que ele pode encontrar o referenciado tipos?
O que eu sei sobre Assembly.Load()
, mas isso por si só não muda nada.Ou pelo menos, não tenho certeza de que isso me dá, pois eu não preciso usar o tipo em tempo de execução, mas sim, quando executar o Dynamic
executável.
Por último, eu controlo o Static.dll
, então, se há algo que eu possa fazer com o projeto para corrigi-lo, Isso poderia ser feito, no entanto, ele não precisa permanecer separados (eu não quero Emitir esta biblioteca para cada vez que eu criar uma dinâmica de montagem).Basicamente, Eu acho que Eu quero ter o meu montagem dinâmica para ter um .assembly extern mscorlib
no manifesto salvar Static
é um local de mscorlib.
Obrigado
Solução
Como pode realizar a adição deste
Static.dll
referência, de modo que, quando alguém executa o executável resultante de saída deDynamic
que ele pode encontrar o referenciado tipos?
A referência será automaticamente adicionada.Note que o normal assembleia-sondagem regras se aplicam quando a sua montagem dinâmica executa, por isso, para encontrar o assembly.Você deve (ou um dos):
- navio static.dll ao lado de dynamic.dll
- coloque static.dll no GAC (mas, por favor:não faça isso!)
- executar dynamic.dll em um Domínio de aplicação com um costume de sondagem-caminho de configuração que permite que static.dll ser encontrado
- identificador de Domínio de aplicação.AssemblyResolve para fornecer static.dll
- usar algo como ILMerge para fusível static.dll e dynamic.dll