Seguimiento de versiones de nivel de file en comstackciones utilizando Visual Studio y .NET?

Quiero una herramienta o una técnica para poder responder a la pregunta "¿Qué versión del file X se utilizó para build Assembly abc.dll?" Recientemente me mudé a un grupo de desarrollo de .NET, y parece que esta pregunta surge todo el time, de una forma u otra, y no la manejamos del todo. Alguien dirá algo así como "Oye, ¿está tu último código en el server de testing?" y la respuesta es inevitablemente algo así como "No sé".

En los viejos times del desarrollo de Unix (me estoy datendo aquí), el sistema de control de fuente SCCS tenía palabras key especiales como% I% (versión) y% M% (nombre del module) que podría colocar en su file, que se replaceá con la información de la versión SCCS apropiada cada vez que se desprotege el file. Entonces, un buen truco que podría hacer es asignar una cadena constante a "% I%% M%" en su file fuente, comstackr y luego ejecutar el command "cadenas" de Unix en su biblioteca resultante para determinar qué versiones de qué files se usaron para build ese file.

Hice una testing rápida para lanzar mi propio file de class C #, como este:

public const String VERSION_STRING = "*VERSION* = MyClass 1.0"; 

Luego ejecuté esta línea de command en mi directory DLL:

 >for %f in (*.dll) do find "VERSION" %f 

Pero los resultados fueron:

 ---------- MYASSEMBLY.DLL VERSION_STRING 

Lo cual no era exactamente lo que buscaba (me dio el nombre de la constante, pero ninguna de las informaciones de versión que había intentado insert manualmente en la class).

Por lo que vale, actualmente estamos usando Clearcase para nuestro control de versiones (actualmente el estándar de la compañía). Clearcase tiene algunas herramientas que pueden ayudarnos aquí (como clearaudit ), pero eso requeriría un esfuerzo para perfeccionar y reorganizar nuestro process de construcción. También debo mencionar que estamos considerando pilotear un interruptor a la subversión. Así que supongo que las soluciones que funcionan con .NET en cualquiera de los diversos sistemas de control de versiones o entornos de compilation (MSBuild, NAnt, CruiseControl) son un juego limpio.

¿Hay alguna otra solución, especialmente las cinputs en .NET, para rastrear qué versión de qué file entró en qué ensamblado?

Rápidamente abandonamos la idea de utilizar palabras key especiales, ya que los metadatos integrados (como el número de versión) en los datos (los files almacenados en el VCS) generalmente no son una buena idea (ver el debate en esta pregunta SO: " Números de versión embeddeds " – ¿Bien o mal? ")

Nuestro enfoque es build una "nota de lanzamiento" con ese tipo de información. Este file de text simple se almacena junto con el dll de compilation.

Tengo una experiencia positiva con SubVersion y el server de continuous integration CC.NET.

Debería configurar un objective NAnt que capte lo último (podría bloquear el repository aquí) y luego comstackr. Una vez que se ha completado la compilation, crea una label de versión en SVN.

La versión de un file se puede deducir fácilmente de la versión de una label durante la compilation.

Para mi trabajo de "comunidad", utilizo un esquema simple; Utilizo el número de revisión SVN como la versión de compilation en los attributes [AssemblyVersion] / [AssemblyFileVersion] en el ensamblaje. Es bastante fácil consultar estos en time de ejecución y mediante el explorador, y el script para actualizarlos también es bastante fácil: las primeras tareas aquí .