Я думаю, что нашел ответ, однако неполный.
Можно указать в листах свойств что-то вроде этого:
<PropertyGroup>
<ProjectIncludeDir>@(ClCompile->'%(AdditionalIncludeDirectories)')</ProjectIncludeDir>
</PropertyGroup>
Это сделает макрос $ (ProjectIncludeDir) доступным для пользовательских шагов сборки, также содержащих список включаемых каталогов.
Проблема этого подхода в том, что строковые операции в этом макросе больше невозможны. Например, рассмотрим следующее:
<ProjectIncludeDirDot>$(ProjectIncludeDir.Replace(';',','))</ProjectIncludeDirDot>
Это приводит к макросу $ (ProjectIncludeDirDot) в @ (ClCompile -> '% (AdditionalIncludeDirectories)'). Кажется, что преобразования оцениваются после макрокоманды, которая нарушает эту замену. Если кто-то знает для лучшего решения, пожалуйста ...