Ответ ДжаредПара хорош, за исключением того, что он не замечает raison d'etre для доменов приложений - то есть вы можете только ВЫГРУЗИТЬ сборку, выгрузив ее домен приложения. Если вы долго работаете в операционной системе и ожидаете, что по какой-либо причине вам придется загружать , а затем выгружать сборки , вам нужен AppDomain. Прототипом примера здесь является ASP.NET, который загружает сборки кода приложения по требованию, а затем может выгружать их позже, когда приложения больше не используются активно.
Стоимость, которую вы платите за возможность выгрузки, заключается в том, что независимость - вам нужно общаться через границу AppDomain. Невозможно сделать простой вызов метода. Вам необходимо управлять жизненным циклом AppDomain. И т.д.
Если вам просто нужно динамически загружать сборки и не думать, что вам нужно их выгружать в течение жизни одного процесса , тогда вам, вероятно, не нужно запустить несколько доменов приложений. Хорошим примером здесь может служить многофункциональное приложение, которое поддерживает модель плагинов, где оно выискивает сборки плагинов в каталоге «etc» и загружает их все. Однако, если модель плагинов требует выгрузки плагинов ... хорошо.
Существуют необычные сценарии. Например, предположим, что вы хотите загрузить 2 разные версии сборки одновременно. Вы можете столкнуться с подводными камнями, если не разделите их с доменами приложений. Но это будет довольно редко.
Основной сценарий, который оправдывает существование доменов приложений, - это длительный процесс, который должен иметь возможность выгружать сборки.
Конечно, приложения могут полагаться на процесс ОС, когда вы хотите выгрузить сборку. Другими словами, у вас может быть запущено 3 или 4 взаимодействующих процесса, каждый со своим собственным набором сборок, а когда вы хотите выгрузить сборку, просто закройте процесс, в котором размещена эта сборка. Но AppDomain предлагает механизм с более высокой производительностью, чтобы сделать это, не требуя остановки / запуска процесса или межпроцессного обмена данными, который еще тяжелее, чем кросс-AppDomain, описанный ранее. Я имею в виду, что это все еще удаленное взаимодействие, но оно медленнее и больше переключает контекст.