2009-03-04 12 views
13

Tengo un proyecto VS2008 escrito en C# con una serie de ensamblajes. Me gustaría tener una forma sencilla de administrar los números de versión entre todos los diferentes ensamblajes y una forma de incrementar automáticamente el número de compilación y guardarlo en el número de versión de cada ensamblaje.Gestión automática del número de versión de ensamblaje en VS2008

Supongo que este es un problema con la mayoría de los proyectos, ¿así que probablemente se haya resuelto antes?

¿Alguna sugerencia de cómo puedo simplificar la administración de los recursos de la versión de mi proyecto?

Respuesta

17

utilizo un archivo .cs en el nivel de la solución que está vinculado por todos los proyectos de la solución que contiene las siguientes líneas:

using System.Reflection; 
[assembly : AssemblyVersion("1.2.3.*")] 

y asegúrese de quitar el atributo del archivo AssemblyFileVersion AssemblyInfo en su proyecto .

+0

Parece que no funciona en VB o es debido a la edición Express para VS.NET? Parece un gran truco. –

+0

Necesita agregar un uso también. Voy a agregar mi respuesta. –

+2

Quiere decir eliminar el atributo "AssemblyFileVersion", ¿verdad? – Alexander

0

Puede escribir una tarea personalizada de MSBuild para hacerlo. Eche un vistazo a this approach

10

Ponga un archivo en la solución, llame a esto "SolutionInfo.cs" (supongo que C#, también funcionaría en VB). En esto pon todas las propiedades que tienes en común. Comience con AssemblyVersionAttribute.

Luego en cada proyecto enlace a esto seleccionando agregar un elemento existente a cada proyecto, pero en lugar de hacer clic en agregar, use el menú desplegable para agregar como enlace.

0

Puede utilizar asteriscos en sus AssemblyInfo.cs:

// Version information 
[assembly: AssemblyVersion("1.0.*")] 

Se aumentará su versionnumbers automáticamente. Para compartir un número entre todos los ensamblados ... No estoy seguro, pero tal vez use el atributo mencionado en un archivo compartido.

3

Tenemos un único archivo AssemblyInfoGlobal.cs a nivel de solución, como las otras respuestas. Luego, como parte de nuestro script de compilación, una pequeña aplicación que toma el CCNetLabel que define CruiseControl.net (y usa el LabelLabeller para generar las etiquetas) y descarga el archivo global, modifica el número de versión y luego vuelve a revisar el archivo global .

Algunos de nuestros proyectos tienen múltiples soluciones, por lo que el archivo global se encuentra por encima del nivel de solución en la estructura del directorio, lo suficientemente alto para que todo lo que necesita esté debajo.

También actualizamos los números de versión de los proyectos de implementación; el número de estos se encuentra en el archivo VDProj, pero no estoy seguro de que los encuentre en las versiones express: creo que es una función de subida profesional completa. Y algunos proyectos tienen una docena de proyectos de implementación, pero no es una forma fácil de externalizar el número de versión del archivo VDPROJ mismo. (¿o hay?)

Luego ocurre la construcción, lo que significa que todas las salidas de la construcción tienen exactamente el mismo número de versión, en cualquier momento podemos obtener la versión del MSI o ensamblado y sabemos exactamente qué fuente era utilizado para construir esa salida.

+0

Hacemos lo mismo usando TeamCity y las tareas de la comunidad MSBuild. En lugar de simplemente incrementar el número, lo cual hacemos, también establecemos la revisión de la versión en el número del conjunto de cambios del control de origen. Eso nos permite rastrear cada artefacto binario hasta la revisión de fuente exacta. – Todd

0

He utilizado el svnversion MSBuild community tasks para hacer algo como esto, seguí las instrucciones here Aunque la forma en que lo hago no abarca múltiples conjuntos.

1

using System.Reflection; [assembly : AssemblyVersion("1.2.3.*")]

Sólo un comentario sobre este tema, los ciclos generados automáticamente el número de versión. Por lo tanto, si está buscando una versión de tal manera que una compilación de ayer tenga una versión 1.2.3.X donde X < X una compilación hoy, entonces este no es el camino a seguir.

Para lograr este uso

[assembly : AssemblyVersion("1.2.*")] 

Esto le dará la versión 1.2.X.Y donde la combinación de X.Y es más grande hoy en día que es ayer. Supongo que X.Y son una función de fecha y hora, respectivamente

Cuestiones relacionadas