2010-12-22 6 views
6

Me postulo automática Construye con TFS 2010. En una solución que tengo más de una aplicación web que están ubicados en el mismo directorio raíz - por ejemplo:¿Cómo decirle a MSBuild que publique muchos proyectos web en un directorio?

RootDir ->

WebApplicationProject1.csproj 
    WebApplicationProject2.csproj 
    ... 

Cuando corro construcción automatizado, me puse los siguientes argumentos para MSBuild:

/p: DeployOnBuild = true; DeployTarget = PipelinePreDeployCopyAllFilesToOneFolder; _PackageTempDir = "\ equipo \ Builds \ en línea"/t: SkipExtraFilesOnServer = true

Sin embargo, MSBuild no conserva el contenido existente en esta carpeta y con cada proyecto se elimina el contenido de esta carpeta. El último proyecto que se construirá es el ganador.

¿Puedo hacer que MSBuild no elimine el contenido de esta carpeta y solo reemplace los archivos existentes?

Gracias por cualquier información sobre este asunto.

Respuesta

0

Puede compilarlas todas en carpetas separadas y luego copiar todos los resultados en la carpeta final. Si los archivos tienen los mismos nombres, probablemente estén en mal estado, pero sería de esa manera si pudieras construirlos directamente en una sola carpeta de todos modos.

+0

Gracias por la respuesta. Pero no quiero eso. Esto significa tener compilaciones separadas en TFS. Quiero una configuración de construcción para construir varios proyectos web que coexisten en el mismo directorio. Cuando se publique, quiero que se publiquen en un directorio también. –

+0

puede escribir un script por lotes o algo que ejecutará todas las versiones separadas y luego las copiará. – zsalzbank

1

No tiene que crear varias configuraciones de compilación. Simplemente defina una solución que contenga ambos proyectos, cree una definición de compilación para esta solución y agregue un objetivo AfterDropBuild que copie todo desde las subcarpetas de resultados de PublishedWebservices a una carpeta común.

0

Esta parece ser la forma en que Microsoft lo quiere. Encontré lo mismo para ser cierto en VS2008. La construcción del proyecto eliminaría toda la carpeta, incluido .svn.

Mi solución es crear un evento posterior a la creación para copiar los archivos de cada ubicación en una carpeta común. No es ideal, pero funciona sin ningún problema importante que encontré.

1

tiene que decirle a MSBuild acerca de sus múltiples objetivos

Trate

<Target Name="Build" DependsOnTargets="T1, T2"> 
</Target> 

MSBuild le permite definir un destino predeterminado y se le permite definir dependencias entre sus objetivos. Si no se define ningún valor predeterminado, ejecuta el primero que encuentre. Usando DefaultTargets puede llamar a múltiples:

<Project DefaultTargets="T1;T2"> 

Un objetivo debe lograr todo un paso bien definido. Por ejemplo, un objetivo Limpiar eliminaría todos los archivos y carpetas necesarios para limpiar el proyecto. Compile compilaría todas las DLL, etc.

Sus objetivos deben declarar normalmente sus propias dependencias:

<Target Name="CI" DependsOnTargets="T1, T2"> 
</Target> 

lo contrario, su objetivo debe contener todos los pasos individuales que desea ejecutar:

<Target Name="XX"> 
    <CallTarget Targets="T1"/> 
    <CallTarget Targets="T2"/> 
</Target> 

si todavía se enfrentan a la confusión, echa un vistazo esto link

+0

Hola @Anna, gracias por la respuesta. No entendí del todo qué hacer. El enlace tampoco ayudó. ¿Puedes explicar más por favor? –

Cuestiones relacionadas