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


Рекомендации по созданию приложений и компонентов для параллельного выполнения

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

  • Удостоверение типа следует привязывать к определенной версии файла.

    Среда CLR привязывает удостоверение типа к определенному файлу, используя сборки со строгими именами. Чтобы создать приложение или компонент для параллельного выполнения, необходимо присвоить всем сборкам строгие имена. Это приводит к возникновению точного удостоверения типа и гарантирует, что в ходе разрешения типов будет указан верный файл. Сборка со строгим именем содержит сведения о версии, языке и региональных параметрах и издателе, которые используются средой выполнения для обнаружения необходимого файла при обработке запроса на привязку.

  • Необходимо использовать хранилище, отслеживающее версии.

    Среда выполнения предоставляет хранилище, отслеживающее версии, в глобальном кэше сборок. Глобальный кэш сборок — это отслеживающая версии структура каталогов, установленная на всех компьютерах, использующих платформу .NET Framework. Сборки, установленные в глобальный кэш сборок, не перезаписываются, когда устанавливается новая версия этой сборки.

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

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

Изолирование приложений и компонентов

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

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

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

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

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

Установка и удаление версий

Разрабатывая приложение для параллельного выполнения, необходимо следовать приведенным ниже рекомендациям в отношении установки и удаления версий:

  • Не следует удалять из реестра сведения, которые могут понадобиться приложениям, работающим с другими версиями платформы .NET Framework.

  • Не следует заменять в реестре сведения, которые могут понадобиться другим приложениям, работающим с иными версиями платформы .NET Framework.

  • Не следует отключать COM-компоненты, которые могут понадобиться приложениям, работающим с другими версиями платформы .NET Framework.

  • Не следует изменять InprocServer32 или другие записи в реестре для уже зарегистрированного COM-сервера.

  • Не следует удалять учетные записи или группы, которые могут понадобиться приложениям, работающим с другими версиями платформы.NET Framework.

  • Не следует добавлять в реестр записи, которые содержат путь без учета версии.

Полный номер версии и номер версии сборки

Версия файла — это ресурс версии Win32, не используемый средой выполнения. Как правило, версия файла обновляется даже при оперативном исправлении ошибок с помощью QFE. Два идентичных файла могут иметь разные сведения о версии файла, и, напротив, два разных файла могут содержать одинаковые сведения о версии.

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

Средство глобального кэша сборок (Gacutil.exe) позволяет заменять сборку, если номер версии файла новее. Установщик обычно переустанавливает сборку только в том случае, если номер ее версии больше.

См. также

Основные понятия

Параллельное выполнение

Перенаправление привязки сборок

Определение стратегии обслуживания для приложений и компонентов

Другие ресурсы

Создание нескольких версий приложения или компонента