Pregunta

Queremos almacenar nuestros reemplazado construir objetivos en un archivo externo y que incluyen objetivos archivo en el TFSBuild.proj.Tenemos un conjunto de pasos que sucede y quisiera conseguir esos pasos adicionales mediante la adición de la línea de importación para el TFSBuild.proj creado por el asistente.

<Import Project="$(SolutionRoot)/libs/my.team.build/my.team.build.targets"/>

No podemos tener una importación en cualquier archivo en el $(SolutionRoot) porque en el momento de la declaración de Importación es validado, la fuente no se ha recuperado desde el repositorio.Parece TFS está tirando hacia abajo de la TFSBuild.proj la primera sin ningún otro tipo de archivos.

Incluso si queremos añadir un condicional de importación, la versión en control de código fuente no van a ser importados si está presente.La versión anterior, ya presente en el disco que va a ser importado.

Podemos dar hasta el almacenamiento de los destinos de compilación con nuestra fuente, pero es la primera dependencia a salir de nuestro árbol de código fuente, así que estamos reacios a hacerlo.

Es allí una manera a:

  1. Dígale Equipo de construcción para tirar abajo un poco más archivos para los Import declaraciones de evaluar correctamente?
  2. Anular esas Equipo de construcción objetivos tales como AfterCompile en una manera, además de la Import?
  3. Finalmente ejecutar la generación de objetivos en Equipo de construcción que se mantienen bajo la fuente está tratando de construir?
¿Fue útil?

Solución

El Equipo de construcción tiene un "bootstrap" fase en la que todo el Equipo de construcción de Configuración de la carpeta (la carpeta con TFSBuild.proj) es descargado de control de versiones.Este es realizado por el agente de compilación antes de que el agente de compilación llamadas MSBuild.exe diciendo que ejecutar TFSBuild.proj.

Si usted mueve sus objetivos archivo en virtud de SolutionRoot y colocarlo en la carpeta de configuración junto a la TFSBuild.proj archivo entonces usted será capaz de importar en su TFSBuild.proj archivo mediante una relación de importación declaración es decir,

<Import Project="myTeamBuild.targets"/>

Si estos objetivos se basan en alguna medida adicional tarea de MSBuild asambleas, a continuación, también puede tenerlos en la misma carpeta que su TFSBuild.proj archivo y puede hacer referencia fácilmente usando una ruta relativa.

Tenga en cuenta que en TFS2008, la acumulación de la carpeta de configuración de valores predeterminados para estar en $/TeamProject/TeamBuildTypes sin embargo, no tiene que estar allí.Se puede vivir en una carpeta que está dentro de la solución y puede incluso ser un proyecto en la solución dedicado a la formación de Equipo.Esto tiene varias ventajas, entre ellas, haciendo que la ramificación de la construcción más fácil.Por lo tanto, yo normalmente tengo mi construcción y está situado en una carpeta como esta:

$/TeamProject/main/MySolution/TeamBuild

También tenga en cuenta que por defecto, durante el proceso de arranque de la fase de la construcción, el agente de compilación sólo descarga los archivos que están en la configuración de generación de carpeta y no recurse hacia abajo en todas las subcarpetas.Si usted quería incluir archivos en subcarpetas durante la secuencia de arranque de la fase de continuación, puede establecer la siguiente propiedad en el appSettings de la tfsbuildserver.exe.archivo de configuración del agente de compilación de las máquinas (que se encuentra en la carpeta %ProgramFiles%\Visual Studio 9.0\Common7\IDE\PrivateAssemblies)

<add key="ConfigurationFolderRecursionType" value="Full" />

Tenga en cuenta que si había varios agentes de compilación usted tendría que recordar para establecer esta configuración en todas las máquinas, y esto afectaría a cada generación se realiza por la que construir agente - así que en realidad lo mejor es sólo para mantener los archivos en la raíz de la carpeta de configuración si se puede.

Buena suerte,

Martin.

Otros consejos

Si los objetivos sólo se debe ejecutar cuando TFS se está ejecutando la construcción y no en el desarrollo local de las máquinas, usted puede poner sus objetivos archivo en la carpeta de construirse a sí misma y hacer referencia a él con:

<Import Project="$(MSBuildProjectDirectory)\my.team.build.targets.proj" />

Sin embargo, si desea que los objetivos a ejecutar para todas las versiones, usted puede configurarlo para que cada uno de los proyectos de referencia por añadir algo como:

<Import Project="$(SolutionRoot)/libs/my.team.build/my.team.build.targets" Condition="Exists('$(SolutionRoot)/libs/my.team.build/my.team.build.targets')" />

En mi proyecto que en realidad el uso de ambas, la primera nos permite personalizar los nightly builds para que podamos hacer pasos adicionales antes y después de la ejecución de la solución completa de compilación, y el segundo permite que el proyecto-por-proyecto de personalización.

Si crea un anula archivo de destino para la importación y llamar algo así como TeamBuildOverrides.objetivos y ponerlo en la misma carpeta en el control de código fuente donde TFSBuild.proj vida por su Tipo de construcción, que se atenderán primero y estar disponibles para su importación en la TFSBuild.proj archivo.De forma predeterminada, el TFSBuild.proj archivo se agrega a la TeamBuildTypes carpeta en el Control de código Fuente directamente debajo de la carpeta raíz de tu proyecto.

utilice la siguiente instrucción de importación en su TFSBuild.proj archivo:

<Import Project="$(MSBuildProjectDirectory)\TeamBuildOverrides.targets" />

Asegúrese de que usted no tiene ningún duplicado reemplaza en su TFSBuild.proj archivo o importados que se anula no será despedido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top