recursos reales psicologia plan marketing internos interno exito ejemplos ejemplo casos tfs msbuild team-build

reales - TFSBuild.proj e Importación de objetivos externos



plan de marketing interno pdf (3)

Queremos almacenar nuestros objetivos de compilación anulados en un archivo externo e incluir ese archivo de objetivos en TFSBuild.proj. Tenemos un conjunto básico de pasos que suceden y nos gustaría obtener esos pasos adicionales simplemente agregando la línea de importación al TFSBuild.proj creado por el asistente.

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

No podemos importar un archivo en $(SolutionRoot) porque en el momento en que se valida la instrucción Import, la fuente no se ha extraído del repositorio. Parece que TFS está bajando el TFSBuild.proj primero sin ningún otro archivo.

Incluso si agregamos una importación condicional, la versión en el control de origen no se importará si está presente. La versión anterior, ya presente en el disco se importará.

Podemos dejar de almacenar esos objetivos de compilación con nuestra fuente, pero es la primera dependencia en abandonar nuestro árbol fuente, por lo que somos reacios a hacerlo.

¿Hay alguna forma de:

  1. ¿Dile a Team Build que tire hacia abajo algunos archivos más para que las declaraciones Import evalúen correctamente?
  2. ¿Anula esos objetivos de Team Build como AfterCompile de una manera que no sea la Import ?
  3. Finalmente ejecuta objetivos de compilación en Team Build que se guardan en la fuente que está intentando compilar.

Si los objetivos solo se deben ejecutar cuando TFS ejecuta la compilación y no en las máquinas de desarrollo locales, puede colocar el archivo de destino en la carpeta de la compilación y hacer referencia a él con:

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

Sin embargo, si desea que los objetivos se ejecuten para todas las compilaciones, puede configurarlo para que los proyectos individuales lo referencian agregando 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 usamos ambos, el primero nos permite personalizar las construcciones nocturnas para que podamos realizar pasos adicionales antes y después de ejecutar la compilación completa de la solución, y el segundo permite la personalización proyecto por proyecto.


Si crea un archivo de destino anulado para importarlo y lo llama algo así como TeamBuildOverrides.targets y lo pone en la misma carpeta en el control de fuente donde TFSBuild.proj vive para su Tipo de compilación, se extraerá primero y estará disponible para la importación en el TFSBuild archivo .proj. De forma predeterminada, el archivo TFSBuild.proj se agrega a la carpeta TeamBuildTypes en Source Control directamente debajo de la carpeta raíz de su proyecto.

use la siguiente declaración de importación en su archivo TFSBuild.proj:

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

Asegúrese de no tener ninguna anulación duplicada en su archivo TFSBuild.proj o las anulaciones importadas no se dispararán.


Team Build tiene una fase de "arranque" en la que todo lo que se encuentra en la carpeta Team Build Configuration (la carpeta con TFSBuild.proj) se descarga desde el control de versiones. Esto es realizado por el agente de compilación antes de que el agente de compilación llame a MSBuild.exe diciéndole que ejecute TFSBuild.proj.

Si mueve su archivo de objetivos desde SolutionRoot y lo coloca en su carpeta de configuración junto con el archivo TFSBuild.proj, podrá importarlo en su archivo TFSBuild.proj utilizando una declaración relativa de importación, es decir,

<Import Project="myTeamBuild.targets"/>

Si estos destinos se basan en ensamblados de tareas personalizados adicionales de MSBuild, también puede tenerlos en la misma carpeta que su archivo TFSBuild.proj y puede hacer referencia a ellos fácilmente mediante una ruta relativa.

Tenga en cuenta que en TFS2008, la carpeta de configuración de compilación está por defecto en $ / TeamProject / TeamBuildTypes, sin embargo, no tiene que estar allí. En realidad, puede vivir en una carpeta dentro de su solución, e incluso puede ser un proyecto en su solución dedicado a Team Build. Esto tiene varias ventajas, como facilitar la bifurcación de la construcción. Por lo tanto, normalmente tengo mi compilación ubicada en una carpeta como esta:

$/TeamProject/main/MySolution/TeamBuild

También tenga en cuenta que, de forma predeterminada, durante la fase de arranque de la compilación, el agente de compilación solo descargará los archivos que están en la carpeta de configuración de compilación y no se repetirá en ninguna subcarpeta. Si desea que incluya archivos en subcarpetas durante la fase de arranque, puede establecer la siguiente propiedad en la configuración de la aplicación del archivo tfsbuildserver.exe.config en las máquinas del agente de compilación (ubicado en% ProgramFiles% / Visual Studio 9.0 / Common7 / IDE / PrivateAssemblies)

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

Tenga en cuenta que si tuviera varios agentes de compilación, tendría que recordar establecer esta configuración en todas las máquinas, y esto afectaría a cada compilación realizada por ese agente de compilación, por lo que en realidad lo mejor es mantener los archivos en la raíz de la máquina. compila la carpeta de configuración si puedes.

Buena suerte,

Martín.