Поделиться через


Сохранение данных в файле проекта MSBuild

Подтип проекта может потребоваться сохранить данные, относящиеся к подтипу, в файл проекта для последующего использования. Подтип проекта использует сохраняемость файла проекта в соответствии со следующими требованиями:

  1. Сохранять данные, используемые в процессе создания проекта. (Дополнительные сведения о подсистеме сборки Майкрософт см. в статье MSBuild.) Сведения, связанные со сборкой, могут:

    1. Независимые от конфигурации данные. То есть данные, хранящиеся в элементах MSBuild с пустыми или отсутствующими условиями.

    2. Данные, зависящие от конфигурации. То есть данные, хранящиеся в элементах MSBuild, которые определяются для конкретной конфигурации проекта. Например:

      <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
      
  2. Сохраняйте данные, которые не относятся к сборке. Эти данные можно выразить в XML-файле свободной формы, который не проверяется на основе xml-схемы.

    1. Независимые от конфигурации данные.

    2. Данные, зависящие от конфигурации.

Сохраняемость данных, полезных для создания проекта, обрабатывается через MSBuild. Система MSBuild поддерживает главную таблицу сведений, связанных с сборкой. Подтипы проекта отвечают за доступ к этим данным для получения и задания значений свойств. Подтипы проекта также могут расширить таблицу данных, связанную со сборкой, добавив дополнительные свойства для сохранения и удалив свойства, чтобы они не сохранялись.

Чтобы изменить данные MSBuild, подтип проекта отвечает за получение объекта свойства MSBuild из базовой системы проектов.IVsBuildPropertyStorage IVsBuildPropertyStorage— это интерфейс, реализованный в основной системе проекта, и агрегирование запросов подтипа проекта путем выполнения.QueryInterface

В следующей процедуре описаны шаги по удалению свойства с помощью IVsBuildPropertyStorage.

Удаление свойства из файла проекта MSBuild

  1. IVsBuildPropertyStorage Вызов QueryInterface подтипа проекта.

  2. Вызов 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>