2008-08-18 13 views
54

En .NET, hay dos números de versión disponibles al crear un proyecto, versión de archivo y versión de ensamblaje. ¿Cómo estás usando estos números? Manteniéndolos igual? Aumento automático de uno, pero cambiando manualmente el otro?¿Cuál es la mejor manera de usar la versión de archivo y la versión de ensamblaje?

¿Qué ocurre con el atributo AssemblyInformationalVersion?

Encontré esta compatibilidad con el artículo de Microsoft Knowledge Base (KB) que me brindó ayuda: How to use Assembly Version and Assembly File Version.

+1

Esta respuesta resume lo mejor: http://stackoverflow.com/a/65062/244353 – Mrchief

Respuesta

14

En un escenario donde tengo múltiples conjuntos de archivos (es decir, 1 exe y 5 dlls) utilizaré una versión de archivo diferente para cada uno, pero la misma versión de ensamblaje para todos ellos, lo que permite saber qué exe cada uno dlls van con.

+2

¿Qué sucede si tiene múltiples archivos con diferentes versiones de ensamblaje dependiendo de algunos dll compartidos? Este enfoque no es genérico. – surfen

+5

Sugeriría hacer lo contrario. Mantenga las versiones de Assembly específicas para cada DLL (dado que ese es el número que 'importa' para .NET y Windows), y use la Versión de Archivo para sincronizar los identificadores de "liberación". – BTownTKD

0

Los mantengo igual. Pero entonces, no tengo conjuntos de múltiples, que es cuando el número AssemblyVersion se vuelve importante. Utilizo la codificación de fecha al estilo de Microsoft para mis números de compilación, en lugar de la autoincrementación (no creo que la cantidad de veces que algo se haya construido sea tan importante).

+1

Estoy de acuerdo, sin embargo, a veces es útil tener un valor que indique una reconstrucción sin cambios en el código fuente, como cuando el comando de compilación se ha modificado ligeramente para corregir un problema en particular. – jpierson

3

@ Adam: ¿Estás cambiando la versión del archivo con cada compilación? ¿Está utilizando el control de versiones (SYN o VSS) y está usando esa información para vincular el origen a los binarios?

Parece tener sentido que la versión de ensamblaje se mantenga igual. es decir, "2.0.0.0". Eso corresponde al despliegue del producto.

La versión del archivo cambia para coincidir con la revisión del control de origen. "2.0.??revisión" Esto proporcionaría un enlace desde un dll específico (o exe) a la fuente que lo creó.

73

En soluciones con proyectos múltiples, una cosa que he encontrado muy útil es que todos los archivos de AssemblyInfo apunten a un solo proyecto que rige el control de versiones. Así que mis AssemblyInfos tienen una línea:

[assembly: AssemblyVersion(Foo.StaticVersion.Bar)] 

Tengo un proyecto con un único archivo que declara la cadena:

namespace Foo 
{ 
    public static class StaticVersion 
    { 
     public const string Bar= "3.0.216.0"; // 08/01/2008 17:28:35 
    } 
} 

Mi proceso de construcción automatizado a continuación, sólo cambia esa cadena tirando de la versión más reciente de la base de datos e incrementando el segundo último número.

Solo cambio el número de compilación principal cuando el conjunto de características cambia drásticamente.

No cambio la versión del archivo.

+7

+1 Buena solución para compartir el número de versión. –

22

El artículo de KB menciona la distinción más importante: las versiones de archivo solo se utilizan para fines de visualización, mientras que la versión de ensamblaje desempeña un papel importante en el comportamiento de carga de .NET.

Si cambia el número de versión del conjunto, la identidad de su conjunto como un todo ha cambiado. Los desarrolladores deberán reconstruir para hacer referencia a su nueva versión (a menos que ponga alguna "política" de auto-versionado) y en el tiempo de ejecución solo se cargarán los ensamblados con números de versión coincidentes.

Esto es importante en mi entorno, donde necesitamos un número de versión incremental y altamente visible para fines de auditoría, pero no queremos forzar a los desarrolladores a reconstruir o tener muchas versiones simultáneamente en producción. En este caso, para cambios menores compatibles con versiones anteriores, actualizamos la versión del archivo, pero no la versión de ensamblaje.

12

Las versiones de archivo solo se utilizan con fines de visualización, mientras que la versión de ensamblaje desempeña un papel importante en el comportamiento de carga de .NET.

No del todo. La versión del archivo también es importante para Windows Installer cuando actualiza una versión existente sobre una anterior.

11

Con mi aplicación actual, cada proyecto VS tiene un enlace a un archivo de origen "AssemblyBuildInfo", que tiene los siguientes atributos:

[assembly: AssemblyVersion("1.0.*")] 
[assembly: AssemblyCompany("Acme Corporationy")] 
[assembly: AssemblyCopyright("Copyright © 2009 Acme Corporation")] 

De esta manera, todas las asambleas en mi solución proporción misma versión y la compañía de información (lo que significa que si tengo que cambiarlo, lo cambio solo una vez). Al excluir FileVersion, se establece automáticamente en AssemblyVersion.

+4

+1 por usar "Acme" :) –

Cuestiones relacionadas