Ваш вопрос заставил меня найти эту ценную информацию о MSDN .Я публикую его здесь для хранения ответа автономного .
Порядка оценки
Когда MSBuild достигает элемента Import импортированный проект эффективно вставляется в импортирующий проект в месте расположения элемента Import .Поэтому расположение элемента Import может влиять на значения свойств и элементов.Важно понимать свойства и элементы, заданные импортируемым проектом, а также свойства и элементы, используемые импортированным проектом.
При сборке проекта сначала оцениваются все свойства, а затем элементы.Например, следующий XML-файл определяет импортированный файл проекта MyCommon.targets:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Name>MyCommon</Name>
</PropertyGroup>
<Target Name="Go">
<Message Text="Name='$(Name)'"/>
</Target>
</Project>
Следующий XML-файл определяет MyApp.proj, который импортирует MyCommon.targets:
<Project
DefaultTargets="Go"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Name>MyApp</Name>
</PropertyGroup>
<Import Project="MyCommon.targets"/>
</Project>
Когда проектbuilds, отображается следующее сообщение:
Name = "MyCommon"
Поскольку проект импортируется после определения свойства Name в MyApp.proj, определение Name в MyCommon.targetsпереопределяет определение в MyApp.proj.Если проект импортируется до определения свойства Name, при сборке будет отображаться следующее сообщение:
Name = "MyApp"
Используйте следующий подход при импорте проектов
Определите в файле проекта все свойства и элементы, которые используются в качестве параметров для свойств и элементов в импортированном проекте.
Импорт проекта.
Определите в файле проекта все свойства и элементы, которые должны переопределять определения свойств и элементов по умолчанию в импортированном проекте.
Пример
В следующем примере кода показан файл MyCommon.targets, который импортируется во втором примере кода.Файл .targets оценивает свойства из импортирующего проекта для настройки сборки.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Flavor Condition="'$(Flavor)'==''">DEBUG</Flavor>
<Optimize Condition="'$(Flavor)'=='RETAIL'">yes</Optimize>
<appname>$(MSBuildProjectName)</appname>
<PropertyGroup>
<Target Name="Build">
<Csc Sources="hello.cs"
Optimize="$(Optimize)"
OutputAssembly="$(appname).exe"/>
</Target>
</Project>
В следующем примере кода импортируется файл MyCommon.targets.
<Project DefaultTargets="Build"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Flavor>RETAIL</Flavor>
</PropertyGroup>
<Import Project="MyCommon.targets"/>
</Project>