Temps de compilation de solutions .NET

Vous travaillez avec des solutions .NET comprenant un nombre considérable de sous-projets? Vous trouvez que la taille occupée par les fichiers de compilations trop grande? Ou tout simplement, vous cherchez à réduire votre de compilation, qui affecte chaque développeur de votre équipe? Alors voici un petit billet proposant un simple de changement de configuration de vos projets, très facile à mettre en place, et permettant de gagner de l’espace, et du temps de compilation.

Vous allez voir, c’est tout simple.

Fonctionnement par défaut

Par default, Visual Studio initialise chaque nouveau projet de telle sorte que les fichiers compilés (assemblies, PDB, etc.) soient placés sous le projet en question, le plus souvent dans le répertoire: bin\NomConfiguration, où NomConfiguration peut être Debug, Release, etc.

Cette configuration se trouve dans les Propriétés d’un projet, dans l’onglet Build :

BuildDefault.PNG

Ainsi, chaque projet possède son propre répertoire bin, ainsi que quelques sous-répertoires selon les différentes configurations (Debug, Release, etc.). Pour l’instant, rien de mal à ça. Le problème, c’est qu’au moment de la compilation, tous les sous-projets référencés par un sous-projet vont voir leur propre assembly et PDB copiés dans le repertoire bin de ses utilisateurs.

Illustrons ce fait par un exemple:

Supposons une solution, un client lourd en WPF, avec les éléments suivants:

ExempleTree.PNG

Dans cette solution, nous avons les dépendances suivantes:

Dependencies.PNG

Ainsi, nous voyons que plusieurs projets dépendent de Netapsys.Utilities, et de SuperApp.Data.

Dans la configuration par défaut, la compilation de ce projet aura pour résultat de copier Netapsys.Utilities.dll et SuperApp.Data.dll (et leurs PDB) dans les répertoires bin des projets SuperApp.Wpf.Application, et SuperApp.Service. Ainsi, on se retrouve déjà avec 3 copies des mêmes fichiers. En fait, il faut même en compter 4, une première instance de ces fichiers se trouvant dans le répertoire obj de chaque projet. Je vous laisse imaginer le résultat dans un projet à 20, 30 ou même 100 projets!

La solution

Comme Visual Studio nous permet justement de configurer finement les paramètres de compilations, il est très simple d’éviter toutes ces copies : il suffit de modifier tous les projets pour qu’ils utilisent tous le même répertoire de sortie. Un moyen simple de le faire est d’utiliser un répertoire relatif, qui se situera au même niveau que les répertoires de projets : ..\bin\[NomConfig]. Il n’y a plus qu’à simplement modifier les propriétés de chacun des projets afin de spécifier ce nouveau répertoire de sortie:

BuildCommonFolder.PNG

Avec cette simple modification, nous n’aurons plus que deux copies de chaque assembly : l’instance du répertoire obj, et celle du répertoire bin commun à tous les projets. Cela évitera donc à chaque compilation une copie intempestive, ce qui réduire la taille occupée par la solution compilée, et également le temps de compilation. Selon la taille du projet, cela peut représenter un gain de temps considérable.

En terminant, il ne faudra pas oublier de faire la modifier de chaque projet pour chaque type de configuration (Debug, Release, etc.).

En espérant que cette astuce vous sera utile!

Un commentaire

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.