Pergunta

o AssemblyVersion e AssemblyFileVersion Os atributos são a maneira integrada de lidar com números de versão para montagens .NET. Embora a estrutura forneça a capacidade de ter as partes menos significativas de um número de versão (construção e revisão, em termos da Microsoft) determinadas automaticamente, acho o método para esse bastante fraco e, sem dúvida, tem muitos outros.

Então, eu gostaria de perguntar: que maneiras foram determinadas a fazer o melhor trabalho de ter números de versão que refletem melhor a versão real de um projeto? Você tem um script pré-construção que define parte da versão para a data e hora ou versão do repositório para sua cópia de trabalho de um projeto? Você apenas usa a geração automática fornecida pela estrutura? Ou alguma outra coisa? Qual é a melhor maneira de gerenciar a versão de montagem/arquivo?

Foi útil?

Solução

No meu projeto atual, usamos o número de revisão da subversão como a parte menos significativa (de construção) do número da versão e usamos um script NANT para criar o arquivo de assemblyInfo do projeto. Utilizamos o mesmo número de versão para os atributos de AssemblyVersion e AssemblyFileVersion. (As outras três partes são major.Minor.Point, onde o major.Minor será incrementado toda vez que houver uma mudança de esquema de banco de dados, e o ponto é incrementado para cada liberação.)

Começamos com o número de construção sendo simplesmente incrementado, mas isso exigia que o arquivo de versão fosse marcado para cada compilação e causasse conflitos ao mesclar. Quando isso se mostrou impraticável, começamos a usar o CruiseControl.net para gerar o número da construção, mas isso dificultou a reprodução de construções específicas manualmente. Eventualmente, fomos ao esquema atual (subversão-revisão).

Nota: Infelizmente, com o .NET, não é possível recriar perfeitamente uma construção de uma revisão passada, porque os compiladores .NET codificam o registro de data e hora atual no arquivo de objeto ao compilar. Toda vez que você compila o mesmo código, você obtém um arquivo de objeto diferente.

Outras dicas

Vejo muitas postagens aqui sobre o uso do número de revisão da subversão como um componente da versão de montagem. Cuidado: os 4 números de versão disponíveis no Windows (ABCD) são limitados a 16 bits (max = 65535). O número de revisão da subversão pode exceder facilmente esse limite, especialmente se você hospeda vários projetos no mesmo repositório.

Em um trabalho anterior, onde usamos a subversão, eu tinha um script NANT sobre o CCNET para extrair a versão do repositório e o usei como o número final.

Nesse trabalho, usamos o VSS (obturador), então isso não é realmente uma opção, por isso temos uma política de atualizá -lo manualmente, com as seguintes diretrizes:

  • Principal: Alterações significativas (> 25%) ou adição na funcionalidade ou interface.
  • Menor: pequenas alterações ou adições em funcionalidade ou interface.
  • Construa: pequenas alterações que quebram a interface.
  • Revisão: FIXA para uma compilação que não altera a interface.

Também mantemos a Assembléia e as versões de arquivo em sincronia. A versão de montagem pode ser facilmente lida programaticamente, enquanto a versão do arquivo pode ser exibida como uma coluna no modo de detalhes no Windows Explorer.

Nossos scripts de construção injetar o número de alterações do TFS na versão. Dessa forma, sabemos exatamente o que estão as verificações na construção.

Temos o nosso servidor de construção de CruiseControl.net incorporado o número da lista de troca de perfuração no AssemblyFileVersion - Isso nos permite rastrear de volta ao código -fonte para qualquer montagem criada pelo servidor de construção. (Sempre construímos a partir do ramo principal.)

Para assembléias que os clientes estarão referenciando, deixamos o AssemblyVersion Constante, a menos que haja mudanças de quebra, nesse caso, aumentamos a versão para garantir que o código do cliente seja reconstruído contra a nova versão.

Utilizamos a versão do Subversão e temos o BuildScripts atualizando as informações da versão do Assembly, portanto, a versão de controle de checkins de origem.

Tendemos a incorporar a data de liberação (ou construir) na assembléia. Por exemplo, se construído hoje, a versão seria "2008.10.06" (o script de compilação a atualiza).

O AssemblyVersionAttribute faz parte da identidade de uma montagem. Mudar isso significa que é uma montagem diferente e os programas que vinculam a essa montagem precisam ser recompilados/vinculados ou uma política de versão precisa ser aplicada. Não achamos isso aparar, por isso optamos por aumentar apenas a troca de montagem para cada hotfix e alteramos apenas a verificação de montagem para cada grande lançamento. Estamos cientes de que essa decisão traz de volta parte do inferno da DLL Win32. Aumentamos o conjunto de montagem para cada compilação e etiqueta/etiqueta o sistema de controle de versão com essa versão para sabermos de qual fonte o binário veio.

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