2009-07-27 15 views
33

Tenemos la convención de versionar nuestras versiones como [principal]. [Menor]. [Micro]. [Revisión], p. 2.1.2.33546..NET: números de revisión grandes en AssemblyVersionAttribute

Nuestra acumulación de secuencia de comandos actualiza automáticamente un archivo que contiene AssemblyInfo.cs

[assembly: AssemblyVersion("x.y.z.w")] 

para poder insertar el número de versión en el montaje.

Pero nuestro repositorio de Subversion acaba de alcanzar la revisión # 65535, que rompió nuestra compilación.

Resulta que cada número en el número de versión tiene un valor máximo de 65534 (probablemente debido a una restricción de Windows).

¿Ha encontrado este problema? ¿Alguna buena solución/solución alternativa?

nos gusta el esquema de incrustar el número de revisión y, obviamente, no puede simplemente restablecer nuestra Subversion-servidor :-)

Respuesta

36

un poco más la información de fondo:

Why are build numbers limited to 65535?

Como esto es poco probable que se cambió, sus opciones son:

  • reciben la revisión Modulo 65535, lo que significa que están de vuelta a 1
  • Utilice el Micro-Campo en su número de versión para dividir el número de versión dividiendo la revisión por 1000. Eso significa que su versión podría ser 1.0.65.535
  • No almacene la Revisión de SVN en AssemblyVersion, sino en el AssemblyInformationalVersion. De esta forma, su Aplicación aún puede acceder a ella para mostrarla, aunque ya no puede usar Windows Explorer para verificar rápidamente la Revisión SVN
  • No almacene la Revisión SVN en AssemblyVersion, sino en los campos AssemblyProduct o AssemblyDescription. De nuevo, de esa manera su Aplicación aún puede acceder a ella, pero también Explorer la mostrará en la Hoja de propiedades.
+5

Si lo coloca en AssemblyInformationalVerison, puede verlo en el Explorador de Windows bajo la propiedad "Versión del producto". Entonces esa es una buena opción. – xagyg

9

Una opción podría ser que sólo tiene que utilizar el [AssemblyFileVersion]; esto todavía plantea una advertencia, sino que va a construir, al menos:

[assembly: AssemblyFileVersion("1.0.0.80000")] 
+4

Esto se ha solucionado en versiones posteriores de msbuild (4.0) y ya no da una advertencia. – JoshSchlesinger

4

According to MSDN, los componentes del número de versión AssemblyVersionAttribute se limitan a UInt16.MaxValue - 1por los datos ensamblaje meta, es decir, no se puede almacenar más grande números en un archivo de ensamblaje. La versión del archivo, como sugiere Marc Gravell, podría ser suficiente para usted, dependiendo de quién lea su número de versión.

6

Decidimos usar la misma convención, y debido a las limitaciones de los números de versión de Windows, elegimos dejar la parte "micro" de nuestros números de versión para preservar el número de revisión. Nuestros números de versión ahora son [major].[minor].[revision/10000].[revision % 10000], por lo que los ensamblados a partir de la revisión 65535 tienen la versión 2.01.6.5535.

+0

Me gusta ese +1, ¿cómo se inyecta el valor en AssemblyInfo.cs? –

+9

Asegúrese de no hacer uso de "actualizaciones menores" en el instalador de Windows si hace esto (es deciractualización que evita la desinstalación/reinstalación completa). El instalador de Windows ignorará por completo el componente de la 4ta versión. Si ya no actualiza manualmente el tercer componente de la versión para reflejar las versiones, el instalador de Windows puede no actualizar ciertos archivos. –

+2

@Ray Hayes: Nuestro script de compilación NAnt usa 'svn info. --xml' para obtener el número de revisión de la copia de trabajo, luego llama a una utilidad escrita a mano para generar esa revisión en un archivo "SolutionInfo.cs" que contiene un atributo [AssemblyVersion]. Este archivo no se agrega a Subversion, sino que todos los proyectos lo utilizan (use "Agregar como enlace" en VS) en la solución, para que todos estén diseñados con el último número de versión. –

Cuestiones relacionadas