.net - usar - se encontraron conflictos entre diferentes versiones del mismo ensamblado dependiente
Cambiar la versiĆ³n de ensamblaje en un ensamblado.NET compilado (6)
Pregunta simple ... ¿hay alguna manera de cambiar la versión de ensamblaje de un ensamblado .NET compilado?
De hecho, estaría bien con una forma de cambiar la versión del archivo de ensamblaje.
¿Por qué quieres hacer esto? Si es para que otra aplicación pueda usarlo, es posible que desee examinar la redirección de enlace de ensamblaje .
Parece que su proceso es pesado porque tiene que actualizar varios archivos de AssemblyInfo. ¿Has considerado compartir el mismo archivo de AssemblyInfo entre proyectos? Derik Whittaker da un buen ejemplo de cómo hacer esto.
Una vez que tenga un solo archivo, podría ir más allá haciendo que un proceso de compilación actualice su única versión de AssemblyInfo utilizando MSBuild o NAnt .
Si tiene pruebas formales y control de fuente, el proceso se vuelve bastante sencillo. Comienza con una comprensión de quién puede cambiar los diferentes segmentos de números de la versión y cuándo. Los ensamblados .net tienen 4 segmentos de número (es decir, 1.0.0.1).
El primer segmento contiene el número de versión principal. Esto es establecido por la gerencia superior e indica un cambio importante en la interfaz de usuario o en la plataforma de la aplicación. Este siempre debe ser el mismo número entre la versión del ensamblaje y la versión del archivo.
El segundo segmento contiene el número de versión secundaria, también conocido como el número de versión de la característica. Esto es establecido por Project Management e indica que se han agregado nuevas características a la aplicación. Este siempre debe ser el mismo número entre la versión del ensamblaje y la versión del archivo.
El tercer segmento contiene el número de compilación. Esto lo establece el grupo de prueba e indica que la aplicación está lista para implementarse. Se cambia antes de que se publiquen las correcciones de errores. Al lanzar una nueva compilación, la prueba restablece el cuarto segmento a 0. Este puede ser el mismo número entre la versión de ensamblaje y la versión de archivo, pero generalmente se deja en 0 para la versión de ensamblado para simplificar el parcheo de las implementaciones existentes.
El cuarto segmento contiene el número de revisión. Esto establecido por el grupo de desarrollo cada vez que comprueban el nuevo código en el control de fuente. Este número se incluiría en la versión del archivo de la DLL compilada, pero no en la versión del ensamblado.
Descubrí que esto ayuda a los implementadores, probadores y desarrolladores a realizar un seguimiento de las últimas versiones sin pisar los dedos de los demás. Desafortunadamente, también trabajé con compañías que usaban un sistema de control de versiones estático para que nadie supiera cuál era el mejor ensamblaje.
Puedes usar ILMerge :
ILMerge.exe Foo.dll /ver:1.2.3.4 /out:Foo2.dll
Una razón válida para hacer esto es incrementar la versión del ensamblado en una compilación en la que encuentre cambios de última hora (usando NDepen por ejemplo). De esta forma, si no hay cambios de última hora, la versión de ensamblaje se mantiene igual y puede aplicar parches a las construcciones lanzadas fácilmente.
Siempre incrementamos la versión del archivo, y eso refleja el número de compilación.
Viejo tema, pero aquí están mis 5 dimes ...
Desmontar
ildasm my.exe /output:my.il / metadata
Edite my.il para cambiar la información de la versión. Hay varios lugares para estudiar:
- major: minor: revision: build - usualmente una ocurrencia
- major.minor.revision.build - varias ocurrencias. La cadena se encuentra en la sección de comentarios después de la línea real. La versión es un valor hexadecimal en una matriz de bytes. Ejemplo:
.custom instance void [mscorlib]System.Reflection.AssemblyFileVersionAttribute::.ctor(string) = ( 01 00 07 35 2E 31 2E 33 2E 30 00 00 ) // ...5.1.3.0..
Edite my.res para cambiar la información de la versión. Haga doble clic y edite con Visual Studio. Procedimiento bastante sencillo.
Armar
ilasm my.il /res:my.res
VerPatch , como se menciona en esta respuesta , es simple y efectivo.