Попытка загрузить dll в домен приложения - PullRequest
0 голосов
/ 09 июня 2011

Я пытаюсь сделать следующее:

if(domain != null)
{
    AppDomain.Unload(domain);
}

domain = AppDomain.CreateDomain(appDomainName);

Assembly assembly = domain.Load(location);

и код выдает исключение FileLoadException

, но когда я делаю следующее, нет исключения:

Assembly assembly = Assembly.LoadFrom(location);

Не могли бы вы сказать мне, в чем может быть проблема.

Спасибо.

Отредактировано:

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

Ответы [ 2 ]

4 голосов
/ 09 июня 2011

С Сюзанна Кук .NET CLR Notes :

AppDomain.Load () предназначен только для вызова на AppDomain.CurrentDomain.(Он предназначен только для вызывающих взаимодействий. Им нужен нестатический метод, а Assembly.Load () является статическим.) Если вы вызываете его на другом домене приложений, если сборка успешно загружается в целевой домен приложения, удаленное взаимодействие затем попытаетсязагрузите его в вызывающий домен приложения, потенциально вызывая исключение FileNotFoundException / SerializationException.

Если вам нужно выполнить exe, используйте AppDomain.ExecuteAssembly () или (начиная с v2.0) AppDomain.ExecuteAssemblyByName (),В противном случае вам следует перейти на использование Assembly.Load () из целевого домена приложения.См. Выполнение кода в другом домене приложений для получения дополнительной информации.

См. Также этот вопрос SO .

0 голосов
/ 09 июня 2011

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

Я не уверен на 100%, но я не думаю, что domain.Load выбирает путь, я думаю, что ему нужно имя сборки ..

Edit:

Посмотрите на эту страницу

посмотрите на замечания:

Этот метод следует использовать только для загрузки сборки в текущий домен приложения . Этот метод предоставляется для удобства тех, кто взаимодействует, которые не могут вызвать статический метод Assembly.Load. Чтобы загрузить сборки в другие домены приложений, используйте метод, например CreateInstanceAndUnwrap.

Информацию, общую для всех перегрузок этого метода, см. В разделе Перегрузка метода Load (AssemblyName).

...