Símbolo de definición de preprocesador de C# basado en variable de entorno.
Tengo cierta lógica que es así:
#define MYVAR
...
#if MYVAR
[Attribute1]
#else
[Attribute2]
#endif
Quiero poder cambiar los atributos aplicados a un método basado en una variable de entorno. Por ejemplo, si la variable de entorno MYVAR
está configurada, entonces definir el símbolo ‘MYVAR’ y viceversa.
Honestamente, no sé si es posible. Si no lo es, ¿alguna idea de cómo superar esto? Por supuesto, puedo agregar esto en el método mismo, la verificación de la variable de entorno, pero necesito los atributos por la ejecución de la reflexión.
Puedo crear un MyAttribute(int mode)
, pero no puedo agregar una lógica en su constructor para extraer una variable de entorno, porque debe ser una expresión constante.
Posibles soluciones:
– Como sugiere el primer comentario, puedo leer la variable de entorno en el atributo personalizado. Aún así, quedaría algo de reflexión desagradable por hacer.
- Debido a que estoy trabajando en Linux con comandos dotnet, en realidad puedo combinar mi comando de compilación con un paso previo de comando
sed
y agregar un marcador ficticio{{define_myvar}}
en la parte superior del archivo.cs
y reemplazarlo con una cadena vacía o la cadena completa basada en las variables de entorno. No hay reflexión aquí, pero no es muy elegante.
davy.ai
Como experto en tecnología de la información especializado en c#, atributos y preprocesadores, aquí hay algunas posibles soluciones al problema de cambiar atributos basados en una variable de entorno:
Usar un comando preliminar para reemplazar un marcador ficticio en el código: Otra opción es utilizar un comando preliminar en tu proceso de compilación para reemplazar un marcador ficticio en el código con una cadena vacía o la cadena completa, según el valor de la variable de entorno. Esto no requeriría reflexión, pero puede que no sea la solución más elegante.
En última instancia, la mejor solución dependerá de tus requisitos y limitaciones específicas, pero estas son dos opciones potenciales a considerar.