Pergunta

Eu quero carregar uma ou mais DLLs dinamicamente para que sejam executadas com uma segurança diferente ou BasePath do que meu aplicativo principal. Como faço para carregar essas DLLs em um AppDomain objetos e instanciar separados deles?

Foi útil?

Solução

Mais especificamente

AppDomain domain = AppDomain.CreateDomain("New domain name");
//Do other things to the domain like set the security policy

string pathToDll = @"C:\myDll.dll"; //Full path to dll you want to load
Type t = typeof(TypeIWantToLoad);
TypeIWantToLoad myObject = (TypeIWantToLoad)domain.CreateInstanceFromAndUnwrap(pathToDll, t.FullName);

Se tudo o que acontece adequadamente (sem exceções jogado) agora você tem uma instância de TypeIWantToLoad carregado em seu novo domínio. A instância que você tem é realmente um proxy (uma vez que o objeto real está no novo domínio), mas você pode usá-lo apenas como seu objeto normal.

Nota:. Tanto quanto eu sei TypeIWantToLoad tem que herdar de MarshalByRefObject

Outras dicas

Se você está alvejando 3.5, você pode tirar vantagem do novo extensibilidade gerenciado quadro para lidar com todo o trabalho pesado para você.

Você pode usar o método AppDomain.CreateInstance para fazer isso . Você precisará chamar o método Unwrap do ObjectHandle que é retornado para chegar ao objeto real.

Criar um novo AppDomain com AppDomain.Create (...). Depois de criar a carga de AppDomain as DLLs para que AppDomain.

Olhe em todos os métodos que appdomain tem com Criar *. Há certas coisas como CreateInstanceAndUnwrap, etc.

Como foi referido anteriormente, use AppDomain.CreateDomain para criar um novo domínio de aplicativo. Você pode então carregar um assembly para ele usando o método de carga, ou até mesmo executar uma montagem usando o método ExecuteAssembly. Você pode usar GetAssemblies para ver se uma assembleia já foi carregado. Esteja ciente, também, que você não pode descarregar um assembly uma vez que é carregado. Você vai precisar de descarregar o domínio.

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