5

Tengo problemas para hacer que Visual Studio se comporte como yo esperaba. Creé 2 perfiles de configuración. Uno tiene el símbolo FOO definido y el otro tiene el símbolo BAR definido. Y tengo este código:Los símbolos de compilación condicional no están definidos

static class MyClass{ 
#if FOO 
    public static string const MyData="foo defined"; 
#endif 
#if BAR /*yes, I know #elif would work here too.. just trying to be simple*/ 
    public static string const MyData="bar defined"; 
#endif 
} 

y luego más tarde en otro archivo que tengo

if(MyClass.MyData=="foo defined")..... 

Bueno, en mi solicitud, me sale un error que MyClass.MyData no está definido.

Además, si lo tengo en el perfil FOO y escribo algo como #error test después del #if FOO, entonces tendrá un error de compilación, pero si lo elimino se compilará muy bien y cuando vaya a ejecutarlo ' Obtendré un error de compilación de que MyClass no contiene una definición para MyData. Además, esta es una aplicación web ASP.Net.

¿Alguien me puede ayudar a descubrir cómo usar la compilación condicional? Actúa como si Visual Studio lo compilara correctamente con los símbolos de compilación, pero cada vez que el servidor web ASP.Net lo ejecuta, lo recompila sin ningún símbolo ... Pero eso simplemente no tiene ningún sentido por qué lo haría ...

Edit: No importa si utilizo el perfil FOO o BAR, ninguno de ellos parece definir el símbolo MyData como deberían.

Edit2:

Ok, esto es importante para la reproducción !!! Crea una nueva carpeta App_Code en tu solución y luego agrega un archivo .cs allí y luego agrega MyClass a ella. Esto reproducirá el error trabajando en un proyecto en blanco. De hecho, me he simplificado que hasta sólo

#if !(FOO || BAR) 
    #error neither foo or bar defined 
#endif 

Parece que Visual Studio no establece símbolos de compilación condicional para los archivos .cs regulares en el interior de App_Code

+0

He cambiado completamente mi respuesta ... Échale un vistazo. –

Respuesta

5

Desde ASP.NET compila su código fuera de su desarrollo entorno, utiliza su propia configuración de compilación. Debe establecer el símbolo de compilación condicional en su web.config, consulte el enlace aquí: Conditional Compilation in ASP.NET 2.0

+0

Eso es lo que hice. En el perfil de configuración de FOO, agregué el símbolo FOO y para el perfil de BAR agregué el símbolo BAR – Earlz

+0

Extraño, el problema debe estar en otro lugar, ¿está seguro de que está construyendo con la configuración correcta? –

+0

sí .. Como dije, se genera sin generar un error, pero cuando ejecuto el sitio web asp.net cargará una página de Error de compilación – Earlz

Cuestiones relacionadas