2010-09-03 2 views
1

Nous avons un fichier MsBuild.proj qui contient la section suivante (simplifiée):Comment faire pour qu'une cible dans un fichier msbuild ne soit appelée qu'une seule fois?

<Target Name="WEB" DependsOnTargets="CleanResults;UpdateAssemblyInfo;Services;Business"> 

    <!-- Other build and release stuff -->  
      <MSBuild Projects="$(CreateInstallValuesScriptProjectFile)" Properties="DatabaseStructureLocation=$(DatabaseDirectory)\Sandbox\002.Structure" /> 
     </Target> 

Fondamentalement, le InstallValuesScript génère un fichier sql dans notre DatabaseDirectory, qui mettra à jour la version de notre application dans le base de données. Assez simple.

La construction est appelée en tant que tel:

MSBuild msbuild.proj /m /t:WEB /p:Configuration=Release;DoRelease=true;DoSandBox=false;DoWix=false /fileLoggerParameters:LogFile=msbuild.log;Verbosity=normal;Encoding=UTF-8 

Cependant, ce que nous voyons est que la section InstallValues ​​est appelée plusieurs fois, et par conséquent ce fichier est créé deux ou trois fois, et différents emplacements ... Evidemment quand la compilation est compilée deux ou trois fois au lieu d'une seule fois, c'est ennuyeux mais pas vraiment critique (ça devient un peu plus lent), cependant pour ce fichier InstallValues, nous ne voulons pas en avoir plusieurs instances .

Alors qu'est-ce qui donne, peut-on appeler une cible plusieurs fois? Peut-être causé par la compilation d'un assembly dépendant? Une certaine lumière sur ce phénomène étrange serait très appréciée.

Répondre

2

En général, à moins EDIT: même si vous <CallTask>, MSBuild ne courrez pas un plusieurs fois la cible dans un si vous avez l'invocation de niveau supérieur d'une construction, même donné les doublons dans les dépendances (les questions d'ordre , mais une fois c'est fait, c'est fait).

Avez-vous peut-être quelques imbrications d'appels aux fichiers de projet qui enchaînent de manière complexe?

Mais la vérité est dans les journaux [que vous semblez créer si assidument!]

+0

Oui, très probablement le problème sera une imbrication d'appels. Je ferais peut-être mieux de refaire la construction à partir de zéro, je pense. Mais merci de me pointer vers les journaux, toujours vérifier la solution évidente d'abord :) – Sam

+0

MSBuild n'appellera pas la cible plusieurs fois même avec ''. La seule façon d'y parvenir est d'utiliser la tâche '' spécifiant différentes propriétés. –

+1

@Dmitry Lobanov: Corrigé. @ Sam: Désolé pour la désinformation –

Questions connexes