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


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

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

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

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

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

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

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

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

    HKCU\MyCompany\MyComponent\VersionXXXX

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

    HKEY_CurrentUser\Software\MyCompany\MyComponent\Version01.01\EnableSuperCoolFeature = TRUE

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

    HKCU\MyCompany\MyComponent\VersionXXYY\SomeApplication

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

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

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

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