Como registrar um assembly com nome não forte para ser carregado como se estivesse no GAC?
Pergunta
Um de nossos parceiros nos forneceu um assembly que precisamos acessar em nosso aplicativo.Infelizmente, este não é um nome forte, por isso não podemos instalá-lo no GAC.E não podemos colocá-lo no mesmo lugar do nosso executável.
Existe uma solução para isso?
EDITAR:Esta será uma solução temporária apenas para testes, quando forem RC, teremos uma montagem com nome forte.
Solução
Você tem algumas opções nesse ponto.
O primeiro é colocar a assembléia em um diretório que tem o Nome da montagem (sem a extensão), que é um subdiretório do diretório de aplicativos.
O segundo é especificar o subdirectory que você deseja que o CLR investiga as referências no arquivo app.config usando o elemento de sondagem.
Finalmente, você pode carregar a montagem dinamicamente usando os vários Métodos de carga na classe de montagem Mas eu diria que é um muito Más ideia neste caso, dado que você tem a montagem e tem tipos de concreto que deseja usar nele. O carregamento da montagem do tempo tardio como esse é normalmente usado quando você deseja submergir a implementação de certas abstrações, o que não parece ser o caso aqui.
Outras dicas
Solução alternativa usando decompilação e assinatura (usando o prompt de comando do desenvolvedor para o Visual Studio):
ildasm.exe /all /typelist /out=DataSystem.il DataSystem.dll
ilasm.exe /dll /optimize /key=DataSystem.snk DataSystem.il
Datasystem.snk pode ser gerado como um arquivo usando o Visual Studio IDEhttp://www.bloggedbychris.com/2011/09/29/signing--net-assembly-in-visual-studio/
Então você deve ser capaz de correr
gacutil.exe -i DataSystem.dll
Outra solução é adicionar o seguinte ao arquivo machine.config:
<runtime>
<developmentMode developerInstallation="true"/>
</runtime>
E adicione DEVPATH = path às variáveis de ambiente do sistema.
A melhor e mais direta solução para assinar e registrar uma assembléia que encontrei foi aqui:http://codeingaddiction.blogspot.com/2011/06/how-to-add-strong-name-to-existing-dll_16.html
Para que isso funcione facilmente, eu cd'd com algum diretório como C: Temp - isso parecia funcionar muito melhor para mim, provavelmente por causa de permissões de arquivo mais acessíveis em algum lugar assim.