2009-05-06 19 views

Respuesta

15

No se puede, no realmente. Lo que puede hacer es definir algunos "Símbolos de compilación condicional", si mira la página "Compilar" de su configuración de proyecto, puede establecerlos allí, para que pueda escribir las sentencias #if para probarlos.

Se inyecta automáticamente un símbolo de DEPURTO (por defecto, esto se puede desactivar) para compilaciones de depuración.

para que pueda escribir código como este

#if DEBUG 
     RunMyDEBUGRoutine(); 
#else 
     RunMyRELEASERoutine(); 
#endif 

Sin embargo, no haga esto a menos que haya una buena razón. Una aplicación que funciona con un comportamiento diferente entre versiones de depuración y liberación no es buena para nadie.

+1

Puede ayudar en el desarrollo de los servicios de Windows (no es necesario instalar/fácil de depuración) – Scoregraphic

+0

@Scoregraphic: Sin embargo, con un comportamiento muy diferente (servicio vs. aplicación de línea de comandos) !!! –

+0

¿Por qué la expresión condicional no encuentra mi configuración personalizada? Tengo un código como este: #if WCFDebug/* mi código */#endif - pero simplemente no lo encuentra. He agregado la configuración dentro de la configuración. – FrenkyB

0

No creo que pueda inyectar eso en tiempo de compilación en el ensamblado, pero una forma de lograrlo sería usar MSBuild y agregarlo al archivo de configuración de la aplicación.

Ver esta entrada del blog acerca de cómo hacer los archivos de configuración multi-entorno usando MSBuild - http://adeneys.wordpress.com/2009/04/17/multi-environment-config/

Alternativamente se podría escribir una tarea de MSBuild que editar un archivo compilado determinado (el C# o archivo VB) y tienen que correr en la tarea BeforeBuild. Sería bastante complicado ya que necesitaría averiguar dónde inyectarlo en el archivo, pero si tuviera algún tipo de configuración de tokenización, debería poder hacerlo. ¡También dudo que sea bonito!

13

Si descarga su proyecto (en el menú contextual) y lo agrega justo antes de la etiqueta </Project> guardará un archivo que tiene su configuración en él. Luego puede leer eso nuevamente para usarlo en su código.

<Target Name="BeforeBuild"> 
    <WriteLinesToFile File="$(OutputPath)\env.config" 
         Lines="$(Configuration)" Overwrite="true"> 
    </WriteLinesToFile> 
</Target> 
+0

He usado la solución de Vaccano. Tengo que cambiar dinámicamente algunos valores de configuración en cada configuración de compilación, no solo depurar o liberar, y esta solución funciona muy bien para mí. Gracias. – MsBugKiller

5

Símbolos de compilación condicional se pueden utilizar para lograr esto. Puede definir símbolos personalizados en el panel Propiedades> Crear configuración para cada proyecto, y usar las directivas #if para probarlos en el código.

Ejemplo que muestra cómo definir el símbolo UNOEURO y cómo usarlo en el código.

UNOEURO symbol defined here

bool isUnoeuro = false; 
#if UNOEURO 
    isUnoeuro = true; 
#endif 
Cuestiones relacionadas