Сохранение данных в файле проекта MSBuild
Подтип проекта может потребоваться сохранить данные, относящиеся к подтипу, в файл проекта для последующего использования. Подтип проекта использует сохраняемость файла проекта в соответствии со следующими требованиями:
Сохранять данные, используемые в процессе создания проекта. (Дополнительные сведения о подсистеме сборки Майкрософт см. в статье MSBuild.) Сведения, связанные со сборкой, могут:
Независимые от конфигурации данные. То есть данные, хранящиеся в элементах MSBuild с пустыми или отсутствующими условиями.
Данные, зависящие от конфигурации. То есть данные, хранящиеся в элементах MSBuild, которые определяются для конкретной конфигурации проекта. Например:
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
Сохраняйте данные, которые не относятся к сборке. Эти данные можно выразить в XML-файле свободной формы, который не проверяется на основе xml-схемы.
Независимые от конфигурации данные.
Данные, зависящие от конфигурации.
Сохранение сведений о сборке
Сохраняемость данных, полезных для создания проекта, обрабатывается через MSBuild. Система MSBuild поддерживает главную таблицу сведений, связанных с сборкой. Подтипы проекта отвечают за доступ к этим данным для получения и задания значений свойств. Подтипы проекта также могут расширить таблицу данных, связанную со сборкой, добавив дополнительные свойства для сохранения и удалив свойства, чтобы они не сохранялись.
Чтобы изменить данные MSBuild, подтип проекта отвечает за получение объекта свойства MSBuild из базовой системы проектов.IVsBuildPropertyStorage IVsBuildPropertyStorage— это интерфейс, реализованный в основной системе проекта, и агрегирование запросов подтипа проекта путем выполнения.QueryInterface
В следующей процедуре описаны шаги по удалению свойства с помощью IVsBuildPropertyStorage.
Удаление свойства из файла проекта MSBuild
IVsBuildPropertyStorage Вызов
QueryInterface
подтипа проекта.Вызов RemoveProperty с
pszPropName
заданным свойством, которое требуется удалить.
Сохранение сведений, связанных со сборкой
Сохраняемость данных в файлах проекта, которые не имеют значения для сборки, обрабатываются с помощью IPersistXMLFragment.
Можно реализовать IPersistXMLFragment в основном project subtype aggregator
объекте project subtype project configuration
, объекте или обоих объектах.
Ниже приведены основные понятия, касающиеся сохраняемости информации, связанной с сборкой.
Базовый проект вызывает основной подтип проекта (т. е. самый внешний подтип проекта) агрегатор для загрузки и сохранения независимых данных конфигурации и вызывает объекты конфигурации подтипа проекта для загрузки или сохранения зависимых данных конфигурации.
Базовый проект вызывает методы IPersistXMLFragment нескольких раз для каждого уровня агрегирования подтипа проекта и передает GUID для каждого уровня.
Базовый проект передает или получает xml-фрагмент, выделенный для определенного подтипа проекта, и использует этот механизм в качестве способа сохранения состояния между уровнями агрегирования.
Базовый проект вызывает реализацию самого внешнего подтипа IPersistXMLFragmentпроекта, передаваемую в GUID. Если GUID принадлежит к самому внешнему подтипу проекта, он обрабатывает сам вызов; в противном случае он делегирует вызов внутреннего подтипа проекта и т. д., пока не будет найден подтип проекта, соответствующий GUID.
Подтип проекта также может изменить фрагмент XML до или после делегирования вызова внутреннего подтипа проекта. В следующем примере показан фрагмент из файла проекта, где имя файла, содержащего свойства, относящиеся к подтипу проекта, передается в этот подтип проекта.
<ProjectExtensions> <VisualStudio> <FlavorProperties GUID="{<FlavorGUID>}"> <FlavorProject TestFileFolder="TestFile" /> </FlavorProperties> </VisualStudio> </ProjectExtensions>