2010-11-24 33 views
1

J'ai développé un grand projet MSBuild pour construire une partie de notre solution. Il y a beaucoup de choses qui se passent - analyse/remplacement XML, services Windows, copie à distance, etc. En conséquence, le fichier est devenu très difficile à gérer, malgré tous mes efforts pour ajouter des décorations dans les commentaires. En un clin d'œil, j'ai décomposé les principaux blocs de fonctionnalités en fichiers séparés, comme "XML.targets", "Services.targets", etc. et les ai importés dans le fichier principal "Build.proj". La construction a encore fonctionné et j'ai immédiatement trouvé que c'était beaucoup plus gérable. Cependant, toutes les informations que j'ai lues sur la fonction d'importation de MSBuild sont qu'il devrait être utilisé pour importer des cibles réutilisables, c'est-à-dire celles qui peuvent être consommées par le projet -any- MSBuild sans aucune modification. Les projets séparés que je crée ici sont le contraire - spécifiques à un projet et casseront par défaut si l'utilisation avec n'importe quoi d'autre à moins modifié.Utilisation de MSBuild Import pour modulariser un projet

donc je suppose que ce que je demande est, même si je peux ... devrait I? Y a-t-il un danger inhérent à l'utilisation d'Import strictement dans le but d'organiser un grand projet? Y a-t-il une meilleure manière de faire cela?

Merci

Répondre

1

Non, il n'y a aucun danger inhérent. Je pense que c'est une bonne décision de fractionner un grand projet en plusieurs fichiers .targets spécifiques à certaines opérations car cela réduit la complexité globale. L'idée de créer des cibles réutilisables signifie qu'elles devraient avoir aussi peu de dépendances que possible sur les autres parties. Par analogie, vous pouvez considérer les fichiers .targets séparés comme des classes. Moins ils sont couplés, mieux c'est. Parce que la modification dans un fichier de cibles risque moins de casser le processus entier. Vous pouvez prendre une paix de papier, dessiner vos fichiers cibles en tant que points avec votre projet principal au centre et dessiner toutes les connexions entre eux. Dites si un fichier cible remplace la cible d'un autre ou attend des propriétés de celui-ci ou d'une autre manière en dépend, alors il y a une connexion. Dans le scénario parfait, vous obtiendrez quelque chose comme une étoile.
En bref: vous devriez si réduit la complexité.