.vcxproj
файлы и подстановочные знаки
Интегрированная среда разработки Visual Studio не поддерживает определенные конструкции в элементах проекта в .vcxproj
файлах. Эти неподдерживаемые конструкции включают подстановочные знаки, списки с разделителями с запятой или макросы MSBuild, которые расширяются до нескольких файлов. Система .vcxproj
проектов для сборок C++ является более строгой, чем MSBuild. Для каждого элемента проекта требуется собственный элемент MSBuild. Дополнительные сведения о .vcxproj
формате файла см. в разделе .vcxproj
и .props
структуре файлов.
Эти примеры конструкций не поддерживаются интегрированной интегрированной среды разработки.
<ItemGroup>
<None Include="*.txt">
<ClCompile Include="a.cpp;b.cpp"/>
<ClCompile Include="@(SomeItems)" />
</ItemGroup>
.vcxproj
Если файл проекта, включающий эти конструкции, загружается в интегрированную среду разработки, проект может сначала работать. Однако проблемы могут возникать сразу после изменения проекта Visual Studio и последующего сохранения на диске. Вы можете столкнуться с случайными сбоями и неопределенным поведением.
В Visual Studio 2019 версии 16.7 при загрузке .vcxproj
файла проекта Visual Studio автоматически обнаруживает неподдерживаемые записи в элементах проекта. Во время загрузки решения вы увидите предупреждения в окне вывода.
Visual Studio 2019 версии 16.7 также добавляет поддержку проектов только для чтения. Поддержка только для чтения позволяет интегрированной среде разработки использовать созданные вручную проекты, которые не имеют дополнительных ограничений для редактируемых проектов интегрированной среды разработки.
Если у вас есть .vcxproj
файл, использующий одну или несколько неподдерживаемых конструкций, его можно загрузить без предупреждений в интегрированной среде разработки с помощью одного из следующих вариантов:
- Вывод списка всех элементов явным образом
- Пометить проект как доступный только для чтения
- Перемещение подстановочных знаков в целевой текст
Вывод списка всех элементов явным образом
В настоящее время нет способа сделать элементы расширения подстановочных знаков видимыми в окне Обозреватель решений в нечитаемом проекте. Обозреватель решений ожидает явного перечисления всех элементов проектами.
Чтобы проекты .vcxproj
автоматически расширяли подстановочные знаки в Visual Studio 2019 версии 16.7 или более поздней, задайте ReplaceWildcardsInProjectItems
для свойства true
значение . Мы рекомендуем создать Directory.Build.props
файл в корневом каталоге и использовать это содержимое:
<Project>
<PropertyGroup>
<ReplaceWildcardsInProjectItems>true</ReplaceWildcardsInProjectItems>
</PropertyGroup>
</Project>
Пометить проект как доступный только для чтения
В Visual Studio 2019 версии 16.7 и более поздних версий можно пометить проекты как доступные только для чтения. Чтобы пометить проект только для чтения, добавьте в файл следующее свойство .vcxproj
или в любой из импортируемых файлов:
<PropertyGroup>
<ReadOnlyProject>true</ReadOnlyProject>
</PropertyGroup>
Этот <ReadOnlyProject>
параметр предотвращает редактирование и сохранение проекта Visual Studio, поэтому в нем можно использовать любые конструкции MSBuild, включая подстановочные знаки.
Важно знать, что кэш проекта недоступен, если Visual Studio обнаруживает подстановочные знаки в элементах проекта в .vcxproj
файле или любом из его импорта. Время загрузки решения в интегрированной среде разработки гораздо дольше, если у вас много проектов, использующих подстановочные знаки.
Перемещение подстановочных знаков в целевой текст
Вы можете использовать подстановочные знаки для сбора ресурсов, добавления созданных источников и т. д. Если они не нужны в окне Обозреватель решений, можно использовать следующую процедуру:
Измените имя группы элементов, чтобы добавить подстановочные знаки. Например, вместо:
<Image Include="*.bmp" /> <ClCompile Include="*.cpp" />
измените его на:
<_WildCardImage Include="*.bmp" /> <_WildCardClCompile Include="*.cpp" />
Добавьте это содержимое в
.vcxproj
файл. Или добавьте его вDirectory.Build.targets
файл в корневом каталоге, чтобы повлиять на все проекты под этим корнем:<Target Name="AddWildCardItems" AfterTargets="BuildGenerateSources"> <ItemGroup> <Image Include="@(_WildCardImage)" /> <ClCompile Include="@(_WildCardClCompile)" /> </ItemGroup> </Target>
Это изменение делает сборку видимыми элементами по мере их определения в
.vcxproj
файле. Однако теперь они не отображаются в окне Обозреватель решений, и они не вызывают проблем в интегрированной среде разработки.Чтобы отобразить правильность IntelliSense для
_WildCardClCompile
элементов при открытии этих файлов в редакторе, добавьте следующее содержимое:<PropertyGroup> <ComputeCompileInputsTargets> AddWildCardItems $(ComputeCompileInputsTargets) </ComputeCompileInputsTargets> </PropertyGroup>
Фактически можно использовать подстановочные знаки для любых элементов в целевом теле. Вы также можете использовать подстановочные знаки в объекте ItemGroup
, который не определен как элемент ProjectSchemaDefinition
проекта.
Примечание.
При перемещении подстановочного знака из .vcxproj
файла в импортированный файл они не будут отображаться в окне Обозреватель решений. Это изменение также позволяет проекту загружаться в интегрированной среде разработки без изменений. Однако этот подход не рекомендуется, так как он отключает кэш проекта.
См. также
Настройка компилятора C++ и свойства сборки в Visual Studio
XML-файлы страницы свойств