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


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

Замечание

Эта статья связана с .NET Framework. Он не применяется к более новым реализациям .NET, включая .NET 6 и более поздние версии.

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

  • Свяжите идентификатор типа с определенной версией файла.

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

  • Используйте хранилище с поддержкой версий.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Не изменяйте inprocServer32 или другие записи реестра для сервера COM, который уже зарегистрирован.

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

  • Не добавляйте ничего в реестр, содержащий неверсивный путь.

Номер версии файла и номер версии сборки

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

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

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

См. также