Partager via


Personnaliser les compilations de solution

Lorsque MSBuild génère un fichier solution, il convertit d’abord le fichier en interne en fichier projet, puis génère ce fichier projet. Le fichier projet généré peut importer un avant.<nom_solution>.sln.targets avant de définir ses cibles, et importer après.<nom_solution>.sln.targets après avoir importé les cibles.

Les fichiers cibles avant et après sont installés dans les répertoires $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ImportBefore et $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ImportAfter.

Par exemple, vous pouvez définir une nouvelle cible pour écrire un message de journal personnalisé après MyCustomizedSolution.sln builds, en créant le fichier suivant nommé après. MyCustomizedSolution.sln.targets dans le même répertoire.

<Project>
 <Target Name="EmitCustomMessage" AfterTargets="Build">
   <Message Importance="High" Text="The solution has completed the Build target" />
 </Target>
</Project>

La build de solution est distincte des builds du projet. Ces paramètres n’affectent donc pas les builds du projet.

Important

La personnalisation des builds de solution de cette façon s’applique uniquement aux builds de ligne de commande à l’aide MSBuild.exe ou dotnet build, et ne s’applique pas aux builds à l’intérieur de Visual Studio. Par conséquent, il est préférable de ne pas mettre la personnalisation au niveau de la solution. Une meilleure alternative pour personnaliser tous les projets d’une solution consiste à utiliser les fichiers Directory.Build.props et Directory.Build.targets dans le dossier de la solution.

L’écriture dans le $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile dossier nécessite généralement des autorisations élevées. Si vous avez de nombreux fichiers solution à étendre de la même façon, mais que vous ne souhaitez pas écrire dans le dossier SolutionFile , vous pouvez créer les fichiers Directory.Solution.props et Directory.Solution.targets et les placer dans le chemin racine au-dessus des fichiers solution que vous souhaitez étendre. Directory.Solution.props est importé au début de la génération de la solution, et Directory.Solution.targets est importé à la fin de la build de la solution.

Lorsque vous générez un fichier de solution, Directory.Build.props et Directory.Build.targets ne sont pas importés. Vous devez donc utiliser Directory.Solution.props et Directory.Solution.targets à la place. Les deux types de fichiers n’importent pas implicitement les uns les autres.

Lorsque vous avez des fichiers Directory.Solution.props ou Directory.Solution.targets dans un dossier racine, mais que vous ne souhaitez pas qu’une solution sous ce dossier importe ces fichiers, vous pouvez utiliser la solution avant.<>nom_solution.sln.targets pour définir les propriétés ImportDirectorySolutionProps et ImportDirectorySolutionTargets sur false.

Ou bien, vous pouvez utiliser les propriétés $(DirectorySolutionPropsPath) et $(DirectorySolutionTargetsPath) pour spécifier un autre emplacement pour ces fichiers. Cette approche peut être utile si des sous-ensembles de vos solutions nécessitent certaines valeurs de propriété ou cibles en commun.

Remarque

La build de solution est prise en charge avec le format de .slnx fichier de solution dans MSBuild 17.12 et versions ultérieures. Les fichiers avant.<solutionname.slnx.targets> et avant.<solutionname>.sln.targets, ainsi que les fichiers après correspondants, fonctionnent avec MSBuild 17.14 et versions ultérieures.

Pour plus d’informations sur les options de personnalisation de build, consultez Personnaliser votre build.