10. Tips & Tricks▲
10-1. Où puis-je trouver des tâches supplémentaires ?▲
Visual Studio et le TFS proposent un ensemble de tâches par défaut que l'on peut utiliser pour paramétrer notre build automatisé.
Cependant, on va rapidement avoir des besoins plus larges par exemple pour :
- Lancer des outils en ligne de commande (FxCop, SandCastle, StyleCop, ...)
- Manipuler la base de registre
- Manipuler la GAC
- Manipuler l'Active Directory
- Travailler avec des fichiers textes ou XML
- Créer ou configurer des sites webs dans IIS
Pour réaliser ce genre de tâches, il sera nécessaire de passer par d'autres types de tâches. On peut trouver sur CodePlex un projet qui nous expose plus d'une centaine de tâches supplémentaires répondant à la très grande majorité des besoins de paramétrage pour vos projets.
Vous pouvez télécharger ce projet sur http://www.codeplex.com/sdctasks.
10-2. Comment modifier le processus de « Get » dans le build ?▲
Si le processus de « Get » qui est fait par défaut dans le build ne vous convient pas (parce qu'il ramène trop de fichiers par exemple), il est possible de le modifier.
10-2-1. En modifiant le workspace utilisé par le build▲
Le build va récupérer l'intégralité des fichiers qui sont définis dans son workspace. A condition que la liste des fichiers à télécharger soit statique (13), on peut alors se contenter de ne travailler sur la liste de mapping du workspace utilisé par le build.
Pour la modifier :
- Clic droit sur le build et choisir « Edit Build Definition »
- L'onglet « Workspace » nous permet d'éditer les mappings
10-2-2. En paramétrant la tâche « Get » qui est faite par le serveur▲
Si par défaut le build télécharge l'intégralité des fichiers du workspace, il est possible de surcharger ce comportement de façon à ne récupérer que certains répertoires du workspace.
Pour cela, il suffit de redéfinir la propriété « GetFileSpec » qui est utilisée en interne.
Attention : ceci ne marchera que si le fichier ou répertoire que vous spécifiez ici apparaît
bien dans votre workspace.
Cette propriété n'est en effet utilisée que pour faire un GET d'une partie du workspace.
10-2-3. En réécrivant la tâche « Get »▲
Enfin si aucune des solutions précédentes ne fonctionne, vous pouvez « tout simplement » réécrire vous même le processus de « Get » dans votre fichier de build.
Pour cela, on overridera le target « CoreGet ».
<Target
Name
=
"CoreGet"
Condition
=
" '$(SkipGet)'!='true' and '$(IsDesktopBuild)'!='true' "
DependsOnTargets
=
"$(CoreGetDependsOn)"
>
<!-- Get the sources for the given workspace-->
<Get
TeamFoundationServerUrl
=
"$(TeamFoundationServerUrl)"
BuildUri
=
"$(BuildUri)"
Workspace
=
"$(WorkspaceName)"
Version
=
"$(GetVersion)"
Filespec
=
"$(GetFilespec)"
PopulateOutput
=
"$(GetPopulateOutput)"
Overwrite
=
"$(GetOverwrite)"
Preview
=
"$(PreviewGet)"
Recursive
=
"$(RecursiveGet)"
Force
=
"$(ForceGet)"
>
<Output
TaskParameter
=
"Gets"
ItemName
=
"Gets"
/>
<Output
TaskParameter
=
"Replaces"
ItemName
=
"Replaces"
/>
<Output
TaskParameter
=
"Deletes"
ItemName
=
"Deletes"
/>
<Output
TaskParameter
=
"Warnings"
ItemName
=
"GetWarnings"
/>
</Get>
<SetBuildProperties
Condition
=
" '$(GetVersion)' != '$(SourceGetVersion)' "
TeamFoundationServerUrl
=
"$(TeamFoundationServerUrl)"
BuildUri
=
"$(BuildUri)"
SourceGetVersion
=
"$(GetVersion)"
/>
<PropertyGroup>
<SourceGetVersion>
$(GetVersion)</SourceGetVersion>
</PropertyGroup>
</Target>
10-3. Comment peut-on récupérer des sources de plusieurs Team Project ?▲
Si vous avez besoin de récupérer des sources se situant dans un autre Team Project - pour que la compilation se passe correctement par exemple - alors le plus simple est de modifier le workspace de votre build.
Il s'agit en fait de modifier le processus de « Get », et vous trouverez les différentes façons de faire au paragraphe « Comment modifier le processus de « Get » dans le build ? ».
10-4. Je crée une propriété utilisant le « BuildNumber », mais celle-ci est vide. Pourquoi ?▲
Dans la section « Propriétés d'un fichier de build : les Properties et PropertyGroup », nous avions vu les différences entre propriétés statiques et propriétés dynamiques.
La propriété « BuildNumber » est une propriété créée dynamiquement par un Target du processus de build par défaut. Par conséquent, vous ne pouvez l'utiliser que dans une autre propriété créée dynamiquement.
Sinon, vous utiliseriez la propriété avant que sa valeur ne soit spécifiée.