Не существует очевидного способа сделать то, что вы пытаетесь сделать. Импорты предварительно обрабатываются для объединения всего содержимого в один файл, они не являются типами данных, такими как массивы элементов или свойства, на которые можно ссылаться позже.
Синтаксис% (Import.Project) не работает, поскольку этот синтаксис действителен только для массивов элементов, и вы пытаетесь использовать его для ключевого слова Import , которое не является массивом заполненных элементов .
Также обратите внимание, что использование элементов ImportGroup, окружающих импорт, является необязательным (и, возможно, немного многословным). Следующие две конструкции в файле MSBuild эквивалентны ...
<ImportGroup Condition="$(Configuration.Contains('Debug'))">
<Import Project="ps.cpp.config.debug.props"/>
</ImportGroup>
... и (для ясности обернуты строкой) ...
<Import
Condition="$(Configuration.Contains('Debug'))"
Project="ps.cpp.config.debug.props"
/>
Если вы пытаетесь диагностировать ошибки импорта листов свойств, не забудьте о параметре командной строки / pp, который выведет весь предварительно обработанный файл. Вы также можете (по крайней мере, для своих собственных файлов) дать каждому импорту уникальную запись в массиве элементов, например,
<Import
Condition="$(Configuration.Contains('Debug'))"
Project="ps.cpp.config.debug.props"
/>
затем внутри ps.cpp.config.debug.props
,
<ItemGroup>
<_Import Include="$(MSBuildThisFile)" />
</ItemGroup>
тогда позже в вашей сборке вы можете получить то, что, по-видимому, ищете, в некоторой степени, с
<Target Name="DumpPropertySheets">
<!-- This does work! -->
<Message Text="%(_Import.Identity)" />
</Target>