Рекомендации по созданию приложений и компонентов для параллельного выполнения
Обновлен: Ноябрь 2007
При создании управляемых приложений или компонентов, предназначенных для параллельного выполнения, необходимо следовать следующим общим рекомендациям:
Удостоверение типа следует привязывать к определенной версии файла.
Среда CLR привязывает удостоверение типа к определенному файлу, используя сборки со строгими именами. Чтобы создать приложение или компонент для параллельного выполнения, необходимо присвоить всем сборкам строгие имена. Это приводит к возникновению точного удостоверения типа и гарантирует, что в ходе разрешения типов будет указан верный файл. Сборка со строгим именем содержит сведения о версии, языке и региональных параметрах и издателе, которые используются средой выполнения для обнаружения необходимого файла при обработке запроса на привязку.
Необходимо использовать хранилище, отслеживающее версии.
Среда выполнения предоставляет хранилище, отслеживающее версии, в глобальном кэше сборок. Глобальный кэш сборок — это отслеживающая версии структура каталогов, установленная на всех компьютерах, использующих платформу .NET Framework. Сборки, установленные в глобальный кэш сборок, не перезаписываются, когда устанавливается новая версия этой сборки.
Следует создавать приложение или компонент, работающий в изоляции.
Приложение или компонент, которые работают в изоляции, должны управлять ресурсами, чтобы избежать конфликтов при одновременном запуске двух экземпляров приложения или компонента. Кроме того, приложение или компонент должны использовать зависимую от версии файловую структуру.
Изолирование приложений и компонентов
Одной из ключевых составляющих успешной разработки приложения или компонента для параллельного выполнения является изолирование. Приложение или компонент должны управлять ресурсами, в частности вводом-выводом, в изолированном режиме. Чтобы обеспечить работу приложения или компонента в изолированном режиме, необходимо следовать приведенным ниже рекомендациям:
Записи в реестре должны учитывать версию. Значения следует хранить в кустах или ключах, которые указывают версию, но не следует использовать общую информацию или состояние в разных версиях компонента. Это помогает избежать перезаписи информации двумя приложениями или компонентами, запущенными одновременно.
Именованные объекты ядра следует привязать к версии, чтобы избежать состояния гонки. Например, состояние гонки возникает, когда два семафора двух версий одного и того же приложения обслуживают друг друга.
Имена файлов и каталогов также необходимо привязывать к версии. Это означает, что файловая структура должна основываться на сведениях о версии.
Учетные записи пользователей и группы следует создавать с привязкой к версии. Учетные записи и группы, созданные приложением, должны идентифицироваться по версии. Не следует использовать одинаковые учетные записи или группы в разных версиях одного приложения.
Установка и удаление версий
Разрабатывая приложение для параллельного выполнения, необходимо следовать приведенным ниже рекомендациям в отношении установки и удаления версий:
Не следует удалять из реестра сведения, которые могут понадобиться приложениям, работающим с другими версиями платформы .NET Framework.
Не следует заменять в реестре сведения, которые могут понадобиться другим приложениям, работающим с иными версиями платформы .NET Framework.
Не следует отключать COM-компоненты, которые могут понадобиться приложениям, работающим с другими версиями платформы .NET Framework.
Не следует изменять InprocServer32 или другие записи в реестре для уже зарегистрированного COM-сервера.
Не следует удалять учетные записи или группы, которые могут понадобиться приложениям, работающим с другими версиями платформы.NET Framework.
Не следует добавлять в реестр записи, которые содержат путь без учета версии.
Полный номер версии и номер версии сборки
Версия файла — это ресурс версии Win32, не используемый средой выполнения. Как правило, версия файла обновляется даже при оперативном исправлении ошибок с помощью QFE. Два идентичных файла могут иметь разные сведения о версии файла, и, напротив, два разных файла могут содержать одинаковые сведения о версии.
Версия сборки используется средой выполнения для привязки сборки. Две одинаковых сборки с разными номерами версий рассматриваются средой выполнения как две разные сборки.
Средство глобального кэша сборок (Gacutil.exe) позволяет заменять сборку, если номер версии файла новее. Установщик обычно переустанавливает сборку только в том случае, если номер ее версии больше.
См. также
Основные понятия
Перенаправление привязки сборок
Определение стратегии обслуживания для приложений и компонентов