Je ne peux pas distinguer ces deux. S’il vous plaît aider!
Définit les cibles qui doivent être exécutées avant que la cible puisse être exécutée.
Output > Target : DependencyTarget1 > Target : DependencyTarget2 > Target : DependsOn
Indique que la cible doit s’exécuter avant ou après la ou les cibles spécifiées.
Output > BeforeTarget run before : BeforeAndAfter > Target : BeforeAndAfter > AfterTarget run after : BeforeAndAfter
Si vous avez plusieurs cibles devant s’exécuter avant ou après la même cible spécifiée, elles seront exécutées dans l’ordre de déclaration :
BeforeTargets
et AfterTargets
pourraient être utilisés pour étendre le processus de génération existant .
Par exemple, avec ces atsortingbuts, vous pouvez facilement exécuter une cible avant CoreComstack ( définit dans Microsoft.CSharp.targets ). Sans cela, vous devrez remplacer la propriété CoreComstackDependsOn
.
Sans AfterTargets
vous n’avez aucun moyen d’exécuter facilement une cible après une autre si aucun point d’extension n’est défini ( CallTarget
à la fin de la cible avec une propriété que vous pouvez remplacer)
Lorsque DependsOnTargets
, BeforeTargets
et AfterTargets
sont utilisés sur la même cible, l’ordre d’exécution est le suivant:
DependsOnTargets
BeforeTargets
AfterTargets
Output > Target : DefaultDependsOn > Target : DefaultBeforeTarget > Target : MainTarget > Target : DefaultAfterTarget
Je pense que la réponse est beaucoup plus simple. L’effet de DependsOnTargets et AfterTargets est essentiellement le même. La raison de BeforeTargets & AfterTargets (à partir de la documentation Microsoft):
Cela permet à l’auteur du projet d’étendre un ensemble existant de cibles sans les modifier directement.
Donc, si vous avez une cible B existante et que vous souhaitez append une nouvelle cible A qui doit être exécutée en premier, vous avez deux choix:
Modifiez la cible B pour lire: DependsOnTargets = “A”.
Modifier la cible A à lire: BeforeTargets = “B”.
Si vous ne pouvez pas modifier B (par exemple, il s’agit d’une cible Microsoft existante), vous avez besoin de BeforeTargets.
DependsOnTarget – supposons que vous ayez deux tâches: 1 – Construire un projet, 2 – Copier tout le contenu. Vous pouvez commencer votre construction en exécutant la tâche 2, puis dans la déclaration de tâche, définissez ses dépendances. Donc, si vous définissez que la tâche 2 dépend de la tâche 1, le processus de construction démarrera et exécutera les tâches 1 et 2.
AfterTargets – beaucoup plus simple signifie uniquement les tâches qui sont exécutées après d’autres cibles. Ainsi, en prenant l’exemple ci-dessus – après la tâche 1 – construire un projet, exécutez la tâche 2.
J’espère que ça aide
Bien que les autres réponses fournies précédemment soient correctes, je pense qu’elles n’ont pas mentionné ce que je pense être le principal avantage d’ AfterTargets
rapport à DependsOnTargets
.
DependsOnTargets
existe depuis le début de MSBuild. Le problème avec DependsOnTargets
, c’est qu’un auteur cible doit autoriser explicitement l’extensibilité. Cela se fait en définissant une propriété utilisée comme valeur DependsOnTargets
, comme suit:
Dependency1;Dependency2 ...
Vous pouvez ensuite append une dépendance en modifiant la propriété SomeTargetDependsOnTargets
comme suit:
$(SomeTargetDependsOnTargets);Dependency3
Le problème avec cette conception est que si l’auteur avait simplement inséré Dependency1;Dependency2
plutôt que de l’extraire dans une propriété, il n’y aurait aucun moyen de le modifier en externe pour permettre la personnalisation.
AfterTargets
, d’autre part, n’exige pas que l’auteur cible d’origine ait explicitement extrait la valeur DependsOnTargets
dans une propriété pour permettre son extensibilité.