Создание хранилища состояний для параллельных сборок

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

Соблюдайте следующие рекомендации по хранению состояния.

  • Спроектируйте хранилище состояний для обеспечения прямой и обратной совместимости. Ожидайте, что версии будут использоваться в любом порядке: например, v1, затем v3, then v2.

  • Инициализируйте и задайте параметры по умолчанию для сборки в коде сборки. Не сохраняйте параметры по умолчанию в реестре.

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

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

  • Все сведения о состоянии сборки, сохраненные в реестре, должны быть изолированы от других версий сборки. Параметры состояния, хранящиеся в реестре, должны сохраняться в отдельных разделах версии реестра. Это необходимо в разделах HKLM и HKCU реестра. Например, сохраните параметры состояния HKCU для версии сборки XXXX в следующем разделе реестра:

    HKCU\Mycompany\MyComponent\VersionXXXX

  • Все сведения о состоянии, хранящиеся в реестре общими сборками, должны сохраняться в отдельных разделах версии реестра. Например, параметр состояния с именем EnableSuperCoolFeature может иметь значение TRUE или FALSE. Сохраните значение для общей параллельной сборки следующим образом:

    \ HKEY_CurrentUser Программного обеспечения\Mycompany\MyComponent\Версия01.01\EnableSuperCoolFeature = TRUE

  • Все сведения о состоянии, хранящиеся в реестре частными сборками, должны сохраняться в отдельных разделах приложения реестра. Это изолирует параметры состояния сборки для приложения. Для настройки виртуального корня можно использовать функцию GetModuleFileName . Например, если версия сборки XXYY является частной сборкой SomeApplication, вызов GetModuleFileName возвращает "SomeApplication", и все частные параметры состояния для сборки должны быть записаны в следующем ключе:

    HKCU\Mycompany\MyComponent\VersionXXYY\SomeApplication

  • Сделайте параметры общего состояния, хранящиеся в реестре, закрытыми для контекста сборки, который выполняется. Для настройки виртуального корня можно использовать функцию GetModuleFileName . Это необходимо сделать для ветвей HKLM и HKCU.

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

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

    • Защищенное хранилище (pstore)
    • Кэш WinInet
    • Microsoft SQL Server