Наследование свойств в проектах Visual StudioProperty inheritance in Visual Studio projects

Собственная система проектов Visual Studio основана на MSBuild.The Visual Studio native project system is based on MSBuild. Платформа MSBuild определяет форматы файлов и правила сборки проектов любого типа.MSBuild defines file formats and rules for building projects of any kind. Она в значительной степени упрощает сборку для нескольких платформ и конфигураций.It manages most of the complexity of building for multiple configurations and platforms. Вам будет полезно разобраться в ее работе.You'll find it useful to understand how it works. Это особенно важно, если потребуется определять пользовательские конфигурацииThat's especially important if you want to define custom configurations. или создавать многоразовые наборы свойств, которые можно совместно использовать и импортировать в несколько проектов.Or, to create reusable sets of properties that you can share and import into multiple projects.

Файл VCXPROJ, файлы PROPS и TARGETSThe .vcxproj file, .props files and .targets files

Свойства проекта хранятся в нескольких файлах.Project properties are stored in several files. Некоторые из них находятся непосредственно в файле проекта .vcxproj .Some are stored directly in the .vcxproj project file. Другие свойства определяются в файлах .targets или .props , которые импортируются файлом проекта и содержат значения по умолчанию.Others come from other .targets or .props files that the project file imports and which supply default values. Файлы проекта Visual Studio 2015 находятся в папке, соответствующей языковому стандарту, в базовом каталоге %ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\v140 .You'll find the Visual Studio 2015 project files in a locale-specific folder under the base directory, %ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\v140.

Свойства проекта хранятся в нескольких файлах.Project properties are stored in several files. Некоторые из них находятся непосредственно в файле проекта .vcxproj .Some are stored directly in the .vcxproj project file. Другие свойства определяются в файлах .targets или .props , которые импортируются файлом проекта и содержат значения по умолчанию.Others come from other .targets or .props files that the project file imports and which supply default values. Файлы проекта Visual Studio 2017 находятся в папке, соответствующей языковому стандарту, в базовом каталоге %VSINSTALLDIR%Common7\IDE\VC\VCTargets\ .You'll find the Visual Studio 2017 project files in a locale-specific folder under the base directory, %VSINSTALLDIR%Common7\IDE\VC\VCTargets\.

Свойства проекта хранятся в нескольких файлах.Project properties are stored in several files. Некоторые из них находятся непосредственно в файле проекта .vcxproj .Some are stored directly in the .vcxproj project file. Другие свойства определяются в файлах .targets или .props , которые импортируются файлом проекта и содержат значения по умолчанию.Others come from other .targets or .props files that the project file imports and which supply default values. Файлы проекта Visual Studio находятся в папке, соответствующей языковому стандарту, в базовом каталоге %VSINSTALLDIR%MSBuild\Microsoft\VC\<version> .You'll find the Visual Studio project files in a locale-specific folder under the base directory, %VSINSTALLDIR%MSBuild\Microsoft\VC\<version>. Значение атрибута <version> зависит от версии Visual Studio.The <version> is specific to the version of Visual Studio. v160 соответствует версии Visual Studio 2019.It's v160 for Visual Studio 2019.

Свойства также хранятся в любых пользовательских файлах .props , которые вы можете добавить в свой проект.Properties are also stored in any custom .props files that you might add to your own project. Мы настоятельно рекомендуем НЕ ИЗМЕНЯТЬ эти файлы вручную.We highly recommend that you NOT edit those files manually. Если у вас нет четкого представления о работе MSBuild и строении файлов .vcxproj , используйте для изменения свойств, особенно участвующих в наследовании, страницы свойств в интегрированной среде разработки.Instead, use the property pages in the IDE to modify all properties, especially the ones that participate in inheritance, unless you have a deep understanding of MSBuild and .vcxproj files.

Как указано выше, одному свойству для некоторой конфигурации можно назначить разные значения в разных файлах.As shown earlier, the same property for the same configuration may be assigned a different value in these different files. При сборке проекта модуль MSBuild оценивает файл проекта и все импортированные файлы в строго определенном порядке, который описывается ниже.When you build a project, the MSBuild engine evaluates the project file and all the imported files in a well-defined order that's described later. По мере оценки каждого файла все значения свойств, определенные в этом файле, переопределяют существующие значения.As each file is evaluated, any property values defined in that file will override the existing values. Все неуказанные значения наследуются от файлов, оцененных ранее.Any values that aren't specified are inherited from files that were evaluated earlier. При установке свойства с помощью страниц свойств важно также следить за тем, где именно вы это делаете.When you set a property with property pages, it's also important to pay attention to where you set it. Если задать свойство X в файле .props , при том что для того же свойства задано значение Y в файле проекта, проект будет создан со свойством, имеющим значение Y.If you set a property to "X" in a .props file, but the property is set to "Y" in the project file, then the project will build with the property set to "Y". Если то же свойство имеет значение Z для элемента проекта, например файла .cpp , то модуль MSBuild использует значение Z.If the same property is set to "Z" on a project item, such as a .cpp file, then the MSBuild engine will use the "Z" value.

Ниже представлено базовое дерево наследования.Here's the basic inheritance tree:

  1. Параметры по умолчанию из набора инструментов MSBuild CPP (файл Microsoft.Cpp.Default.props в базовом каталоге, который импортируется файлом .vcxproj )Default settings from the MSBuild CPP Toolset (the Microsoft.Cpp.Default.props file in the base directory, which is imported by the .vcxproj file.)

  2. Страницы свойств.Property sheets

  3. Файл .vcxproj ..vcxproj file. (Этот файл может переопределять параметры по умолчанию и параметры страницы свойств.)(This file can override the default and property sheet settings.)

  4. Метаданные элементов.Items metadata

Совет

Свойство, выделенное полужирным шрифтом на странице свойств, определяется в текущем контексте.On a property page, a property in bold is defined in the current context. Свойство в обычном шрифте наследуется.A property in normal font is inherited.

Просмотр развернутого файла проекта со всеми импортированными значениямиView an expanded project file with all imported values

Иногда полезно просмотреть развернутый файл, чтобы определить, как наследуется значение данного свойства.Sometimes it's useful to view the expanded file to determine how a given property value is inherited. Для просмотра развернутой версии введите следующую команду в командной строке Visual StudioTo view the expanded version, enter the following command at a Visual Studio command prompt. (замените заполнители на конкретные имена файлов).(Change the placeholder file names to the one you want to use.)

msbuild /pp: temp .txt myapp .vcxprojmsbuild /pp:temp.txt myapp.vcxproj

Развернутые файлы проекта могут быть большими и трудными для понимания, если вы не знакомы с MSBuild.Expanded project files can be large and difficult to understand unless you're familiar with MSBuild. Ниже представлена основная структура файла проекта.Here's the basic structure of a project file:

  1. Основные свойства проекта, которые не представлены в интегрированной среде разработки.Fundamental project properties, which aren't exposed in the IDE.

  2. Импорт файла Microsoft.cpp.default.props , который определяет некоторые базовые, независимые от набора инструментов свойства.Import of Microsoft.cpp.default.props , which defines some basic, toolset-independent properties.

  3. Глобальные свойства конфигурации (предоставляемые как свойства по умолчанию PlatformToolset и Project на странице Конфигурация > Общие ).Global Configuration properties (exposed as PlatformToolset and Project default properties on the Configuration General page. Эти свойства определяют, какие страницы свойств набора инструментов и встроенные страницы свойств будут импортироваться в Microsoft.cpp.props на следующем шаге.These properties determine which toolset and intrinsic property sheets are imported in Microsoft.cpp.props in the next step.

  4. Импорт файла Microsoft.cpp.props , который задает большинство значений проекта по умолчанию.Import of Microsoft.cpp.props , which sets most of the project defaults.

  5. Импорт всех страниц свойств, включая файлы .user .Import of all property sheets, including .user files. Эти страницы свойств могут переопределить все значения, кроме свойств по умолчанию PlatformToolset и Project.These property sheets can override everything except the PlatformToolset and Project default properties.

  6. Остальная часть свойств конфигурации проекта.The rest of the project configuration properties. Эти значения могут переопределять значения, заданные на страницах свойств.These values can override what was set in the property sheets.

  7. Элементы (файлы) вместе с связанными с ними метаданными.Items (files) together with their metadata. Эти элементы всегда используются последними в правилах вычисления MSBuild, даже если находятся до других свойств и импортов.These items are always the last word in MSBuild evaluation rules, even if they occur before other properties and imports.

Дополнительные сведения см. в разделе Свойства MSBuild.For more information, see MSBuild Properties.

Конфигурации сборкиBuild configurations

Конфигурация — это просто произвольная группа свойств, которым назначено имя.A configuration is just an arbitrary group of properties that are given a name. Visual Studio предоставляет конфигурации отладки и выпуска.Visual Studio provides Debug and Release configurations. Каждая из них задает различные свойства соответственно для сборки отладки или выпуска.Each sets various properties appropriately for a debug build or release build. Вы можете использовать Configuration Manager для определения настраиваемых конфигураций.You can use the Configuration Manager to define custom configurations. Так удобно группировать свойства для определенной конфигурации сборки.They're a convenient way to group properties for a specific flavor of build.

Чтобы лучше разобраться в конфигурациях сборки, откройте диспетчер свойств.To get a better idea of build configurations, open Property Manager. В зависимости от настроенных параметров его можно открыть, выбрав пункт Вид > Диспетчер свойств или Вид > Другие окна > Диспетчер свойств.You can open it by choosing View > Property Manager or View > Other Windows > Property Manager , depending on your settings. В диспетчере свойств есть узлы для каждой пары конфигурации и платформы в проекте.Property Manager has nodes for each configuration and platform pair in the project. В каждом из этих узлов находятся узлы для страниц свойств (файлы .props ), позволяющие задать некоторые свойства для этой конфигурации.Under each of these nodes are nodes for property sheets ( .props files) that set some specific properties for that configuration.

Диспетчер свойствProperty Manager

Например, можно перейти в область "Общие" на страницах свойств.For example, you can go to the General pane in the Property Pages. Измените значение свойства "Кодировка" на "Не задано" вместо "Использовать Юникод" и нажмите кнопку ОК.Change the Character Set property to "Not Set" instead of "Use Unicode", and then click OK. В диспетчере свойств страницы свойств Поддержка Юникода больше не будет.The Property Manager now shows no Unicode Support property sheet. Она удаляется для текущей конфигурации, но сохраняется для других.It's removed for the current configuration, but it's still there for other configurations.

Дополнительные сведения о диспетчере и страницах свойств см. в статье Совместное или повторное использование параметров проекта Visual Studio C++.For more information about Property Manager and property sheets, see Share or reuse Visual Studio C++ project settings.

Совет

Файл .user является нерекомендуемым.The .user file is a legacy feature. Мы рекомендуем удалить его, чтобы обеспечить правильную группировку свойств по конфигурации и платформе.We recommend that you delete it, to keep properties correctly grouped according to configuration and platform.