c# - ¿Puedo hacer una constante a partir de una variable env de compilación en csharp?
environment-variables compile-time (4)
De acuerdo, esto es lo que terminé haciendo. No es muy elegante, pero funciona. He creado un paso previo a la construcción que se ve así:
echo namespace Some.Namespace > "$(ProjectDir)/CiInfo.cs"
echo { >> "$(ProjectDir)/CiInfo.cs"
echo ///^<summary^>Info about the continuous integration server build that produced this binary.^</summary^> >> "$(ProjectDir)/CiInfo.cs"
echo public static class CiInfo >> "$(ProjectDir)/CiInfo.cs"
echo { >> "$(ProjectDir)/CiInfo.cs"
echo ///^<summary^>The current build number, such as "153"^</summary^> >> "$(ProjectDir)/CiInfo.cs"
echo public const string BuildNumber = ("%BUILD_NUMBER%" == "" ? @"Unknown" : "%BUILD_NUMBER%"); >> "$(ProjectDir)/CiInfo.cs"
echo ///^<summary^>String of the build number and build date/time, and other useful info.^</summary^> >> "$(ProjectDir)/CiInfo.cs"
echo public const string BuildTag = ("%BUILD_TAG%" == "" ? @"nohudson" : "%BUILD_TAG%") + " built: %DATE%-%TIME%"; >> "$(ProjectDir)/CiInfo.cs"
echo } >> "$(ProjectDir)/CiInfo.cs"
echo } >> "$(ProjectDir)/CiInfo.cs"
Luego agregué "CiInfo.cs" al proyecto, pero lo ignoré desde el control de versiones. De esa manera, nunca tengo que editarlo ni comprometerme, y el proyecto siempre tiene una constante disponible que es el último número y tiempo de compilación.
Usamos Hudson para construir nuestros proyectos, y Hudson define convenientemente variables de entorno como "% BUILD_NUMBER%" en el momento de la compilación.
Me gustaría usar esa variable en el código, para que podamos hacer cosas como registrar qué compilación es en tiempo de ejecución. Sin embargo, NO PUEDO hacer System.Environment.GetEnvironmentVariable porque eso es acceder al entorno de tiempo de ejecución, lo que quiero es algo como:
#define BUILD_NUM = %BUILD_NUMBER%
o
const string BUILD_NUM = %BUILD_NUMBER%
Excepto que no conozco la sintaxis. ¿Puede alguien indicarme el camino correcto? ¡Gracias!
Una forma de hacerlo es agregar un paso de compilación antes de la compilación que reemplace las expresiones regulares en los archivos de origen apropiados para% BUILD_NUMBER%.
Una posibilidad es usar T4 para generar su clase de configuración con todas las constantes instanciadas. T4 está bien integrado en MSVS, no necesita su propio paso de compilación personalizado.
define no le permite definir contantes en C # como puede hacerlo en C / C ++.
Desde esta página :
La directiva #define no se puede usar para declarar valores constantes como se hace normalmente en C y C ++. Las constantes en C # se definen mejor como miembros estáticos de una clase o estructura. Si tiene varias constantes de este tipo, considere crear una clase separada de "Constantes" para contenerlas.
Si busca reflejar el número de compilación en su clase AssemblyInfo, la mayoría de las herramientas de compilación admiten la generación de esa clase en el momento de la compilación. MSBuild tiene una tarea para ello. Como hace NAnt . No estoy seguro de cómo Hudson hace esto.