Respondí una pregunta similar pero diferente en ¿Cómo se incluyen archivos adicionales con los paquetes de implementación web VS2010? .
En su escenario en el que está utilizando el evento posterior a la compilación, recomendaría eliminar el evento posterior a la compilación e implementar sus acciones utilizando sus propios objetivos de MSBuild en lugar del evento posterior a la compilación. A continuación encontrará el texto de la otra respuesta.
De: ¿Cómo se incluyen archivos adicionales mediante los paquetes de implementación web VS2010?
Gran pregunta. Acabo de publicar una entrada de blog muy detallada sobre esto en Web Deployment Tool (MSDeploy): paquete de compilación que incluye archivos adicionales o que excluye archivos específicos .
Aquí está la sinopsis. Después de incluir archivos, también muestro cómo excluir archivos.
Incluyendo archivos adicionales
Incluir archivos adicionales en el paquete es un poco más difícil, pero aún así no es complicado si se siente cómodo con MSBuild, y si no lo está, lea esto. Para hacer esto, necesitamos conectarnos a la parte del proceso que recopila los archivos para empaquetarlos. El objetivo que necesitamos extender se llama CopyAllFilesToSingleFolder. Este objetivo tiene una propiedad de dependencia, PipelinePreDeployCopyAllFilesToOneFolderDependsOn, que podemos aprovechar e inyectar nuestro propio objetivo. Así que crearemos un destino llamado CustomCollectFiles y lo inyectaremos en el proceso. Logramos esto con lo siguiente (recuerde después de la declaración de importación).
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>
Esto agregará nuestro objetivo al proceso, ahora necesitamos definir el objetivo en sí. Supongamos que tiene una carpeta llamada Archivos adicionales que se encuentra 1 nivel por encima de su proyecto web. Quieres incluir todos esos archivos. Aquí está el destino CustomCollectFiles y discutimos después de eso.
<Target Name="CustomCollectFiles">
<ItemGroup>
<_CustomFiles Include="..\Extra Files\**\*" />
<FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
<DestinationRelativePath>Extra Files\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>
Aquí lo que hice fue crear el elemento _CustomFiles y en el atributo Incluir le dije que recogiera todos los archivos en esa carpeta y cualquier carpeta debajo de ella. Luego utilizo este elemento para completar el elemento FilesForPackagingFromProject. Este es el elemento que MSDeploy realmente usa para agregar archivos adicionales. También observe que declaré el valor DestinationRelativePath de los metadatos. Esto determinará la ruta relativa a la que se colocará en el paquete. Usé la instrucción Archivos adicionales% (RecursiveDir)% (Nombre de archivo)% (Extensión) aquí. Lo que eso dice es colocarlo en la misma ubicación relativa en el paquete que en la carpeta Archivos adicionales.
Excluyendo archivos
Si abre el archivo de proyecto de una aplicación web creada con VS 2010 hacia la parte inferior, encontrará una línea con.
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
Por cierto, puede abrir el archivo del proyecto dentro de VS. Haga clic derecho en el proyecto, seleccione Descargar proyecto. Luego haga clic derecho en el proyecto descargado y seleccione Editar proyecto.
Esta declaración incluirá todos los objetivos y tareas que necesitamos. La mayoría de nuestras personalizaciones deben ser posteriores a esa importación, si no está seguro, ¡póngalas después! Entonces, si tiene archivos para excluir, hay un nombre de elemento, ExcludeFromPackageFiles, que se puede usar para hacerlo. Por ejemplo, digamos que tiene un archivo llamado Sample.Debug.js que está incluido en su aplicación web, pero desea que ese archivo se excluya de los paquetes creados. Puede colocar el fragmento a continuación después de esa declaración de importación.
<ItemGroup>
<ExcludeFromPackageFiles Include="Sample.Debug.xml">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
Al declarar rellenar este elemento, los archivos se excluirán automáticamente. Tenga en cuenta el uso de los metadatos FromTarget aquí. No entraré en eso aquí, pero debes saber que siempre debes especificarlo.