Поделиться через


Настройка сборок решений

При сборке файла решения MSBuild сначала преобразует его в файл проекта, а затем строит этот файл проекта. Созданный файл проекта может импортировать файл before.<имя>решения.sln.targets перед тем как определить любые целевые объекты, и импортировать after.<имя>решения.sln.targets после того, как импортированы целевые объекты.

Файлы целей до и после устанавливаются в каталоги $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ImportBefore и $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ImportAfter.

Например, можно определить новую цель для записи пользовательского сообщения журнала после сборки MyCustomizedSolution.sln, создав следующий файл after.MyCustomizedSolution.sln.targets в том же каталоге.

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

Сборка решения отличается от сборок проекта, поэтому эти параметры не влияют на сборки проекта.

Это важно

Настройка сборки решения таким образом применяется только к сборкам командной строки с помощью MSBuild.exe или dotnet buildне применяется к сборкам внутри Visual Studio. Поэтому рекомендуется не помещать настройки на уровне решения. Более эффективной альтернативой настройке всех проектов в решении является использование файлов Directory.Build.props и Directory.Build.targets в папке решения.

Для записи в папку $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile обычно требуются повышенные разрешения. Если у вас есть много файлов решения для расширения таким же образом, но вы не хотите записывать их в папку SolutionFile , можно создать файлы Directory.Solution.props и Directory.Solution.targets и поместить их в корневой путь над файлами решения, которые вы хотите расширить. Directory.Solution.props импортируется в начале сборки решения, а Directory.Solution.targets импортируется в конце сборки решения.

При создании файла решения Directory.Build.props и Directory.Build.targets не импортируются, поэтому вместо этого необходимо использовать Directory.Solution.props и Directory.Solution.targets. Два типа файлов не импортируют друг друга автоматически.

Если у вас есть файлы Directory.Solution.props или Directory.Solution.targets в корневой папке, но вы не хотите, чтобы решение, находящееся в этой папке, импортировало эти файлы, вы можете использовать файл перед.<solutionname>.sln.targets для задания свойств ImportDirectorySolutionProps и ImportDirectorySolutionTargets значения false.

Кроме того, можно использовать $(DirectorySolutionPropsPath) свойства и $(DirectorySolutionTargetsPath) свойства, чтобы указать другое расположение для этих файлов. Этот подход может быть полезным, если подмножества решений требуют определенных значений свойств или целевых объектов в общих случаях.

Примечание.

Сборка решения поддерживается в формате файла решения .slnx в MSBuild 17.12 и более поздних версиях. Оба файла до.<solutionname>.slnx.targets и до.<solutionname>.sln.targets, а также соответствующие после файлы работают с MSBuild 17.14 и более поздними версиями.

Дополнительные сведения о параметрах настройки сборки см. в разделе "Настройка сборки".