Pergunta

Eu estou fazendo um sistema addin onde as principais cargas de aplicativos montagens Addin1.dll e Addin2.dll no tempo de execução no novo AppDomain.

No entanto, no caso de que Addin1.dll é assinado (nome forte) com a minha chave e Addin2.dll não é, eu quero ser capaz apenas de carregar Addin1.dll e rejeitar Addin2.dll.

Estou suspeitando que ele precisa ser feito definindo alguns parâmetros em AppDomainSetup?

Foi útil?

Solução

Olhe para o Assembly.Load método que leva um parâmetro Evidence. Você pode encontrar um exemplo de como criar uma evidência de sua chave pública aqui .

Outras dicas

Você pode implment um DomainManager e basear a sua carga de decisão / bloco sobre o que você gosta. Eu respondi uma pergunta algo relacionado aqui.

Você pode usar método de carga de AppDomain classe para carregar nova montagem em appdomain, desde política publisher da montagem está satisfeito pelo ambiente de usuário do cliente ou no final.

Além disso, o forte chamado assembly segue todas as regras estabelecidas pela editora da montagem e da CLR. Assim, o usuário das necessidades de montagem para satisfazer o aspecto do conjunto que está sendo carregado no appdomain segurança.

As cargas CLR A Assembléia Global referenciada a partir do GAC usando as fortes propriedades de nome. Se a referida montagem está disponível no GAC, CLR retornará a sua contendo subdirectório e o ficheiro de manifesto que prende o é carregado. Encontrar a montagem desta forma assegura o chamador que o conjunto carregado em tempo de execução veio da mesma editora que construiu a montagem o código foi compilado contra. Agora comparação de chave pública token na referência de montagem da mesa assemblyRef ea chave pública token no referenciada montagem da tabela AssemblyDef. Se a referência de montagem não está no GAC, os olhares CLR no diretório base do aplicativo e, em seguida, nos caminhos particulares identificados no arquivo de configuração do aplicativo; Se a aplicação contendo o conjunto está instalado usando o MSI, então CLR invoca MSI para carregar o conjunto requerido. Se a Assembleia não é encontrado em qualquer um destes localização, uma exceção é lançada e, finalmente, a ligação da falha de montagem.

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