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


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

Примечание.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также