Pergunta

O que é considerado como a melhor prática quando se trata de montagens e lançamentos?

Eu gostaria de ser capaz de fazer referência a várias versões da mesma biblioteca -. Solução contém vários projetos que dependem de diferentes versões de uma biblioteca commonutils.dll nós construímos nós mesmos

Como todas as dependências são copiados para o bin / debug ou bin / release, apenas uma única cópia de commonutils.dll pode existir lá apesar de cada um dos arquivos DLL com diferentes números de versão de montagem.

Devo incluir números de versão no nome do assembly para ser capaz de fazer referência a várias versões de uma biblioteca ou há outra maneira?

Foi útil?

Solução

Aqui está o que eu tenho vivido por -

Depende do que você está planejando usar os arquivos DLL para. I classificá-los em dois grupos principais:

    Assembléias
  1. beco sem saída. Estes são arquivos EXE e DLL arquivos que você realmente não está pensando em referência a partir de qualquer lugar. Apenas fracamente citar estes e ter certeza de que os números de versão você soltar marcadas na fonte-controle, para que você possa reverter sempre.

  2. referenciados Assembléias. nome forte estes para que você pode ter várias versões de ele ser referenciado por outros conjuntos. Use o nome completo para fazer referência a elas (Assembly.Load). Mantenha uma cópia da versão mais recente-e-maior do que em um lugar onde outro código pode referenciá-lo.

Em seguida, você tem uma escolha de se copiar locais ou não suas referências. Basicamente, a troca resume-se a - que você quer tomar patches / atualizações de suas referências? Não pode haver valor positivo na medida em que fiquem nova funcionalidade, mas por outro lado, pode haver alterações significativas. A decisão aqui, creio eu, deve ser feita numa base caso-a-caso.

Ao desenvolver no Visual Studio, por padrão, você terá a versão mais recente de compilação com, mas uma vez que compilou a referência de montagem exigirá a versão específica foi compilado com.

A sua última decisão é a cópia local ou não. Basicamente, se você já tem um mecanismo para implantar o assembly referenciado, defina como falso.

Se você está planejando um grande sistema de gerenciamento de liberação, você provavelmente vai ter que colocar muito mais pensado e cuidado para isso. Para mim (pequena loja - duas pessoas), esta multa funciona. Nós sabemos o que está acontecendo, e não se sentem impedidos de tendo para fazer as coisas de uma forma que não faz sentido.

Depois de chegar a tempo de execução, você Assembly.Load o que quiser na aplicação de domínio . Então, você pode usar Assembly.GetType para alcançar o tipo que você deseja. Se você tem um tipo que está presente em vários assemblies carregados (como em várias versões do mesmo projeto), você pode ter uma AmbiguousMatchException exceção. Para resolver isso, você vai precisar de ter o tipo de uma instância de uma variável de montagem, não o método Assembly.GetType estático.

Outras dicas

Assembléias podem coexistir no GAC (Global Assembly Cache), mesmo que tenham o mesmo nome dado que a versão é diferente. Isto é como .NET Framework enviado montagens trabalho. Um requisito que devem ser cumpridas para que uma montagem para ser capaz de ser GAC registrado é para ser assinado.

Como adicionar números de versão para o nome da Assembleia apenas derrota o propósito do ecossistema montagem e é complicado IMHO. Para saber qual versão de um determinado conjunto acabo de abrir a janela Propriedades e verificar a versão.

Dar nomes diferentes para diferentes versões de montagem é a maneira mais fácil e certamente funciona.

Se o seu conjunto (commonutils.dll) é de nome forte (ou seja assinado), você pode pensar sobre instalá-lo no GAC (Global Assembly Cache - você pode instalar versões diferentes do mesmo conjunto lado-a-lado na GAC), portanto, o aplicativo de chamada recebe automaticamente a versão apropriada de lá porque Tipos .NET incluem a montagem informações sobre a versão.

Em seu projeto VS você faz referência a versão correta da biblioteca, mas você não implantá-lo na pasta do aplicativo; instalá-lo no GAC vez (durante a configuração do aplicativo).

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