Como registrar um assembly com nome não forte para ser carregado como se estivesse no GAC?

StackOverflow https://stackoverflow.com/questions/2290006

  •  21-09-2019
  •  | 
  •  

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.

Foi útil?

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.

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