Теневая копия AppDomain - загрузка / выгрузка динамически загружаемого Dll - PullRequest
0 голосов
/ 05 августа 2010

Код, приведенный ниже, который я пытаюсь загрузить dll динамически, не работает.

AppDomain appDomain = AppDomain.CreateDomain("DllDomain");
Assembly a = appDomain.Load(fileName);
//Assembly a = Assembly.LoadFrom(fileName);
objType = a.GetType(className);
obj = a.CreateInstance(className);
object[] args = new object[1];
args[0]=(object) "test";
object ret = objType.InvokeMember("Perform", BindingFlags.Default | BindingFlags.InvokeMethod, null, obj, args);
string output = ret.ToString();
obj = null;
AppDomain.Unload(appDomain);

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

Слышал, что мы можем добиться, используя 'Shadow Copying' в AppDomain. Но я ничего не знаю о «теневом копировании» и о том, как реализовать то же самое в приведенном выше коде.

Пожалуйста, предоставьте рабочий код в качестве примера для 'теневого копирования'.

-B.S.

1 Ответ

0 голосов
/ 05 августа 2010

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

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

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

Предоставление рабочего кода здесь, вероятно, будет слишком большим по размеру.

...