poner la date de compilation en el cuadro

Tengo una aplicación C # WinForms con un cuadro Acerca de. Pongo el número de versión en el cuadro Acerca de usando:

FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location) .FileVersion 

Esto termina dándome el número de revisión de Subversion desde el cual se construyó el ejecutable.

También me gustaría get la date de compilation en el cuadro Acerca de. Lo intenté:

 File.GetLastWriteTime(Assembly.GetEntryAssembly().Location) 

Pero eso me da la date de escritura del ejecutable, que solo corresponde a la date en que se instaló la aplicación (estamos usando ClickOnce) no construida .

¿Cómo puedo get la date de compilation ?

Si usa el control de versiones automático, puede convertir los últimos dos bits del número de versión en una date de compilation: MSDN

Estamos usando esta pieza de código muy similar:

 DateTime buildDate = new FileInfo(Assembly.GetExecutingAssembly().Location).LastWriteTime; 

y estoy bastante seguro de que no cambiará cuando instale desde ClickOnce … ¡Si me equivoco, corrígeme!

Puede cambiar la versión de su set para codificar la date, pero eso probablemente signifique perder su información de revisión de subversión, que posiblemente sea más útil.

Esto debería funcionar: escriba la date / hora actual en un file .cs como una tarea previa a la compilation, como sigue:

 [assembly: AssemblyCreated(CreatedDate = new DateTime(...))] 

Puede usar un file por lotes, secuencia de commands de PowerShell o ejecutable para eso.

Incluya el file en su proyecto (acción de compilation: comstackr) e incluya el atributo personalizado:

 [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)] public sealed class AssemblyCreatedAttribute : Attribute { public DateTime CreatedDate { get; set; } } 

Al inicio de la aplicación, puede usar el reflection para get el atributo personalizado del ensamblaje para visualizarlo en la página de aproximadamente.

La única forma en que pude hacerlo en C / C ++ fue tener un process de post-construcción hacer una búsqueda y replace una cadena especial asignada como una "constante estática" en el binary.

Sin embargo, podría haber una manera más fácil en c #.

No creo que exista una forma estándar de hacerlo, pero puede enrollar algo usted mismo. Cree un atributo de nivel de ensamblado personalizado, asígnele un nombre genérico como 'AssemblyDateAttribute'. Deje que tome una cadena que puede analizar en un DateTime en el constructor al que se puede acceder a través de una propiedad.

Como parte de un process de compilation, cree un nuevo file con solo el atributo que se aplica al ensamblado. (Haga que se vea como AssemblyInfo.cs) y luego incluya eso en su input de compilation.

Luego, en su cuadro sobre, busque en su ensamblaje las instancias de este atributo y muestre el valor de la date en su cuadro.

En proyectos de Visual Studio hay un file AssemblyInfo.cs, pero puede usar cualquier otro file .cs. Mira el atributo AssemblyVersion:

 // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("2.0.*")] 

Ahora puede calcular la date de compilation utilizando la propiedad Version.Build . El valor que devuelve Version.Build es el número de días desde: 2000/1/1

 Assembly.GetExecutingAssembly().GetName().Version.ToString(); 

De mi propio código C #.