2010-10-08 9 views

Respuesta

8

Al mirar los archivos de MSBuild que Visual Studio usa, el evento Build Build es ejecutado por Build target. Si ejecuta msbuild desde la línea de comandos y llama al objetivo de publicación directamente, definitivamente llama a Build primero. Si hace clic con el botón derecho en el proyecto en VS y hace clic en Publicar, se ejecuta un objetivo recortado llamado PublishOnly, en el supuesto de que VS ya haya realizado una compilación.

Visual Studio debe ejecutar su evento de compilación posterior cuando crea automáticamente su proyecto antes de la publicación. En la pestaña Eventos de compilación de las propiedades de su proyecto, ¿configuró el evento como "ejecutar siempre"?

Si desea ser más explícito sobre lo que sucede antes de la publicación, existe un objetivo BeforePublish que Publish siempre busca, ya sea que esté ejecutado por MSBuild o Visual Studio. Edite su archivo de proyecto a mano, y en la parte inferior verá un par de elementos de objetivo comentados. Añada uno de su propia así:

<Target Name="BeforePublish"> 
    <Exec Condition="'$(PostBuildEvent)' != ''" 
      WorkingDirectory="$(OutDir)" Command="$(PostBuildEvent)" /> 
</Target> 

que se ejecutará el mismo evento posterior a la acumulación que definió en su proyecto, pero se puede poner cualquier tarea de MSBuild dentro de esos elementos diana.

+4

Así que mi evento de compilación es copiar el app.config correcto (tengo una versión de desarrollo, prueba y prueba) y encriptarlo. El evento de creación posterior se activa (gracias) pero descubrí que no copia esta app.config en el manifiesto de publicación, parece seleccionar el app.config original del proyecto. – Brad

+0

ClickOnce publicará cualquier cosa en su proyecto con una acción de compilación de "Contenido", así que asegúrese de que su aplicación app.config tenga una acción de compilación de Ninguna. Eso no evitará que la compilación le cambie el nombre a MyApp.exe.config. ClickOnce recogerá el archivo exe.config porque la compilación lo enumera como salida. Si reemplaza el archivo exe.config en su carpeta Debug/Release en el destino BeforePublish, ClickOnce debería seleccionar su versión encriptada. –

+1

@Ray ... pero el problema es que ClickOnce no está recogiendo exe.config de la carpeta Debug/Release. Lo está recogiendo de "App Config" sea lo que sea. Esta es la línea de la ventana de salida de Visual Studio durante una sesión de publicación ClickOnce: Copiando archivo de "App.config" a ".. \ .. \ .. \ bin \ MEO_D_E_Release \ app.publish \ Application Files \ EMS.OCC600.Infrastructure. Shell_1_0_4_28 \ EMS.OCC600.Infrastructure.Shell.exe.config ". –

Cuestiones relacionadas