Использование домена приложения в C#


каково наиболее важное использование доменов приложений в C#?

5 69

5 ответов:

на один из самых важных использовать это ваш код должен быть - т. е. все, что вы пишете в C# выполняется в AppDomain. Это очень важно ; - p

Если вы имеете в виду дополнительные приложение-Домены:

при использовании плагинов и другого ненадежного кода он позволяет как изолировать, так и выгружать их (вы не можете выгружать сборки - только целые Домены приложений).

Я использую его в настоящее время для загрузки динамически генерируемые DLL, так что я могу их выгрузить.

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

MSDN имеет раздел о доменах приложений,здесь.

Я не могу сказать вам, что самая важная польза, так как это зависит от ситуации.

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

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

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

В общем, это не так ежедневная практика кодирования, чтобы использовать домены приложений, это можно считать чем-то вроде продвинутой концепции.. но, начиная с этой простой вещи, важно лучше понять понятия, стоящие за словом "AppDomain".

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

начиная оттуда, класс AppDomain в первую очередь используется для получения доступа к приложению, связанному с исполняющим доменом приложения, это можно сделать с помощью реализации свойства Singleton AppDomain.CurrentDomain. Таким образом можно:

  1. получить доступ к загруженных сборок;
  2. получить доступ к appdomain-общие данные слоты;
  3. intems маршалинг, с точки зрения разворачивания созданных экземпляров из загруженных сборок в созданных доменах.

затем класс AppDomain используется для:

  1. создать больше "доменов" в том же процессе;
  2. выполнение сборок в процессе;
  3. управление процессом загрузки/выгрузки appdomain.

было бы полезно взглянуть на код новой платформы Microsoft (пока нет вышел)MEF (Managed Extesibility Framework) который действительно основан на таких понятиях, как создание доменов приложений и выгрузка динамически загружаемых сборок.

в качестве простого примера вещей и примеров того, что вы можете сделать с доменами приложений, я могу поделиться этим ссылке.

надеюсь я ответил на ваш вопрос.

C# AppDomain-это логически изолированный контейнер, внутри которого выполняется код .NET. При запуске любого кода .NET он всегда выполняется в домене приложения по умолчанию.

смотрите это 30-минутное видео на youtube Что такое C# AppDomain ? что объясняет AppDomain более подробно.

C# Appdomain

но позвольте мне все же попытаться объяснить более подробно. Допустим, вы получаете стороннюю DLL, и вы хотите использовать ее в своем приложении. Но вы также сомневаетесь, что у третьей стороны может быть какой-то вредоносный код, поэтому вы хотели бы запустить стороннюю DLL в ограниченной среде. Например, вы не хотите, чтобы третья сторона получала доступ к вашему диску c: или удаляла файлы и так далее.

таким образом, вы можете создать два домена приложений, один из которых предназначен для третьей стороны, а другой для ваших собственных классов C#. Для стороннего appdomain вы будете применять ограничение безопасности, что он не может получить доступ к диску c: и для вашего C# DLL у вас будет неограниченное приложение домен.

пожалуйста, прочитайте мой блог для стандартного применения загрузки DLL во время выполнения и перекрестной связи с помощью AppDomain. https://blog.vcillusion.co.in/sending-events-through-application-domain-boundary/

  1. загрузка и выгрузка DLL во время выполнения: Я работал над проектом, где DLL загружаются во время выполнения пользователем, а во время выполнения программы методы выполняются с использованием отражения и выгружаются во время программы бежать.
  2. защита моей основной программы выполнения: мы загружаем DLL динамически, поэтому любое исключение, которое произошло в этой динамически загружаемой DLL, не повлияло на мой основной домен приложений. В случае коррупционных сценариев у нас есть возможность эффективно выгружать и загружать DLL снова.
  3. Кросс-AppDomain Связи: мы можем динамически загружать любые две библиотеки DLL во время выполнения в разных доменах приложений и заставлять их взаимодействовать друг с другом другой.