Depuis la mise en place d'un serveur Team Foundation, les demandes pour automatiser la compilation se font de plus en plus présentes. Malheureusement, les développeurs sont habitués a utiliser les PreBuild et PostBuild pour accomplir certaines tâches spécifiques. Ces tâches n'étant absolument pas prévues pour fonctionner sur un serveur de compilation, les Builds échouent...

Les solutions.

  • La solution la plus simple est de demander aux développeurs de ne plus utiliser ces options, vous êtes sur d'obtenir une levée de bouclier et d'entendre un certain nombre de remarques désobligeantes agrémentées de nom d'oiseaux.
  • Ajouter un test dans la ligne de commande de l'événement et vérifier si le nom de machine est le nom du serveur de compilation. Si vous utilisez plusieurs machines de compilation, vous risquez de rencontrer des problèmes. Il faut également que tous les projets soient modifiés en conséquence.
  • Indiquer tout simplement à la tâche VCBuild qu'il ne faut rien faire.

Indiquer à VCBuild qu'il ne faut rien faire

J'ai cherché sur le net et j'ai enfin trouvé.
Il suffit d'éditer le fichier TFSBuild.proj et d'ajouter les lignes suivantes :

<PropertyGroup>
	<AdditionalVCOverrides>&lt;Tool Name="VCPreBuildEventTool" CommandLine =""/&gt;</AdditionalVCOverrides> 
</PropertyGroup>


Le nom de ces tools peut être trouvé en ouvrant un fichier projet (.vcproj) en mode texte.

Attention : Si vous devez supprimer les événements de PreBuild et de PostBuild, il ne faut pas faire :

<PropertyGroup>
	<AdditionalVCOverrides>&lt;Tool Name="VCPreBuildEventTool" CommandLine =""/&gt;</AdditionalVCOverrides> 
	<AdditionalVCOverrides>&lt;Tool Name="VCPostBuildEventTool" CommandLine =""/&gt;</AdditionalVCOverrides> 
</PropertyGroup>


En effet, la valeur de "AdditionalVCOverrides" sera mise à jour en utilisant de contenu de la dernière ligne. Il faut concaténer les deux valeurs en utilisant le caractère ';' comme séparateur comme suit :

<PropertyGroup>
	<AdditionalVCOverrides>&lt;Tool Name="VCPreBuildEventTool" CommandLine =""/&gt;
	;
	&lt;Tool Name="VCPostBuildEventTool" CommandLine =""/&gt;</AdditionalVCOverrides> 
</PropertyGroup>