2011-02-18 13 views
7

He creado una aplicación de consola (blah.exe) con app.config específica para dev y prod. Estos se llaman dev_app.config y prod_app.config. He conectado un objetivo AfterBuild en mi archivo csproj * que copia el archivo de configuración correcto en el directorio bin como blah.exe.config.Cómo usar el archivo final {project} .exe.config al crear un proyecto de instalación

También he creado un proyecto de instalación para esta aplicación de consola, pero me he encontrado con un pequeño problema. Parece que el proyecto de instalación usa el app.config real del directorio del proyecto en comparación con el blah.exe.config final (ubicado en el directorio bin).

|--Bin 
| |--Debug 
|  |--Blah.exe.config <--- I want the setup project to use this file 
|--app.config <--- Setup project uses this file at the moment 
|--dev_app.config 
|--prod_app.config 

¿Cómo puedo forzar el proyecto configuración para utilizar el archivo de configuración final generado en la carpeta bin y no el archivo real app.config?

Información adicional:

Mi solución actual implica la adición de otro comando AfterBuild que sobrescribe el archivo real app.config. No me gusta el enfoque, ya que me obliga a tener un archivo adicional que no necesito. Además, tener este archivo me ha causado algo de pena ya que hice cambios en el archivo app.config que se sobreescribió al compilar. La pregunta es cómo hacer que el proyecto de instalación utilice el archivo de configuración final en la carpeta bin y NOT cómo administrar la configuración o formas de crear un archivo de configuración.

* Adaptado de Deploy an app.config based on build configuration

+0

¿Está utilizando la versión DEBUG para dev y la versión para producción? Si es así, puedes echar un vistazo al uso de #if DEBUG http://msdn.microsoft.com/en-us/library/4y6tbswk.aspx y quizás cargar los diferentes archivos de configuración basados ​​en eso usando http://msdn.microsoft .com/en-us/library/ms223161.aspx –

+0

@astander, sí 'dev_app.config' para Debug y' prod_app.config' para Release. – Ahmad

+0

No estoy seguro de por qué lo haces de esta manera. Cree el archivo base .config para que sea adecuado para la implementación. Solo crea uno especial para la configuración de depuración. Despliega la versión Release. –

Respuesta

2

He estado usando el mismo escenario exacto pero yo uso el BeforeBuild en lugar de AfterBuild, y siempre ha estado bien. He estado haciendo esto tanto en proyectos web como de Windows. A continuación está el código que estoy usando.

<Target Name="BeforeBuild"> 
    <ItemGroup> 
     <ConfigSourceFiles Include="Web.$(Configuration).config" /> 
     <ConfigDestinationFiles Include="Web.config" /> 
    </ItemGroup> 
    <Copy SourceFiles="@(ConfigSourceFiles)" DestinationFiles="@(ConfigDestinationFiles)" /> 
    </Target> 

Espero que esto ayude.

+0

¿Cuál es la ventaja de utilizar BeforeBuild? Si no hay diferencia, esto es lo que estoy haciendo en el ... – Ahmad

+0

Esto me alegra el día.Es la mejor solución que he encontrado. Gracias – yopez83

Cuestiones relacionadas