.net referencia ¿Cuál es la mejor manera de usar la versión de archivo y la versión de ensamblaje?




system io filenotfoundexception no se puede cargar el archivo o ensamblado newtonsoft json (7)

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?

¿Qué pasa con el atributo AssemblyInformationalVersion ?

Encontré este artículo de Microsoft Knowledge Base (KB) que me brindó cierta ayuda: cómo usar la versión de ensamblaje y la versión de archivo de ensamblaje .


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 ensamblaje, 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 creciente 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.


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

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

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


En un escenario en el que tengo varios ensamblajes de archivos (es decir, 1 exe y 5 dlls) usaré una versión de archivo diferente para cada uno, pero la misma versión de ensamblaje para todos ellos, lo que te permite saber con qué exe va cada uno de los dlls.


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

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

Tengo un proyecto con un solo 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 compilación automatizado simplemente 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 en absoluto.


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).


@ 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 la Asamblea 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ó.






versions