Создание хранилища состояний для параллельных сборок
При создании собственных параллельных сборок следуйте рекомендациям по созданию параллельных сборок и создайте библиотеки 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