Он делает много вещей и вносит часть логики сборки.
На самом деле существует два важных импорта для «стандартных» проектов .NET: Microsoft.Common.props
и Microsoft.Common.targets
(последний может быть неявно включен из файла импорта, специфичного для типа проекта).
Основная идея состоит в том, чтобы разделить логику сборки на две части: одну, которая импортируется до содержимого вашего проекта (которое будет .props
), и одну, которая будет включена позже (.targets
).
Microsoft.Common.props
будет определять некоторые свойства на основе соглашений - например, установить значения по умолчанию для текущей конфигурации (например, build for Debug
, если при сборке из командной строки конфигурация не была указана).
Он также импортирует другие файлы, установленные как расширения, в установку msbuild / vs tools или в проект - например, NuGet 4+ использует это для проектов в стиле PackageReference
.
После того, как импорт Microsoft.Common.props
установит все значения по умолчанию, ваша очередь проекта изменить значения по умолчанию в соответствии с выбором пользователя (и шаблонами проекта), а также определить некоторые другие свойства и элементы, необходимые для процесса сборки.
Ваш проект должен затем импортировать файл .targets
, который определяет логику msbuild, необходимую для выполнения сборки проекта. Это делается с помощью Microsoft.Common.targets
(и файлов, которые он выбирает для импорта).
Все, что нужно для переопределения логики, исходящей из этого файла, должно быть указано после этого импорта - поэтому шаблоны проектов VS имеют закомментированную область для пользовательских AfterBuild
целей. Поскольку AfterBuild
уже определено с помощью общих целей, вам потребуется переопределить его после этого импорта (или использовать пользовательское имя и добавить AfterTargets="AfterBuild"
, что предпочтительнее в более новых версиях MSBuild).
Разделение .props
/ .targets
по умолчанию и логике также часто используется в пользовательских расширениях сборки и соглашении об именах для файлов msbuild, которые должны импортироваться сверху (.props
) и снизу (* 1031). *) проектов.
В проектах на основе SDK, которые были представлены для .NET Core, но также могут использоваться с .NET Framework, эта концепция расширяется путем импорта файлов Sdk.props
и Sdk.targets
- до и после содержимого проекта. соответственно. Набор соглашений помогает найти эти файлы и даже позволяет опустить элементы <Import>
, указав атрибут в файле проекта: <Project Sdk="Microsoft.NET.Sdk">...</Project>
. Этот импорт будет определять даже больше значений по умолчанию, чем Microsoft.Common.props
, что позволяет создавать очень маленькие и более удобочитаемые файлы проекта. (в настоящее время только шаблоны проектов .NET Core / .NET Standard и ASP.NET Core используют этот формат, поскольку VS 2017 использует для него другую систему проектов, чем для классических файлов csproj)