AppDomain.CreateInstanceAndUnwrap завершается ошибкой, если имя библиотеки было изменено - PullRequest
0 голосов
/ 08 января 2010

Привет,

У меня есть приложение, которое позволяет пользователям импортировать созданные ими библиотеки (DLL-библиотеки .NET), если библиотека соответствует конкретным рекомендациям, которые я им дал (используйте мое пространство имен, украшайте методы с помощью моего атрибута и т. Д.). ). Я копирую каждый пользовательский lib во внутренний каталог, а затем загружаю его в свой собственный домен приложения (чтобы пользователь мог выгрузить его при желании). Поэтому у меня есть ограничение: нельзя загружать две библиотеки с одинаковым именем.

Я бы хотел снять это ограничение, не помещая каждый пользовательский lib в уникальный подкаталог моего внутреннего каталога. Я попытался переименовать пользовательскую библиотеку lib, когда копировал ее во внутренний каталог. Например, если пользователь говорит об импорте c: \ SomeLib.dll, и я обнаружил, что у меня уже есть загруженная библиотека с именем SomeLib.dll, я копирую новый файл в ... \ MyInternalDir \ SomeLib2.dll. Однако, когда я делаю это, моя команда загрузки:

(ISomeInterface) iSomeLib = someAppDomain.CreateInstanceAndUnwrap(
                                    "SomeLib2", 
                                    "SomeNamespace.SomeClassInSomeLib");

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

FileLoadException: не удалось загрузить файл или сборка "MyLib2" или один из его зависимостей. Расположенная сборка определение манифеста не соответствует сборка ссылка. (Исключение из HRESULT: 0x80131040)

Есть ли какой-нибудь способ сказать .NET: "Не обращайте внимания на тот факт, что имя файла было изменено с момента его компиляции"?

1 Ответ

1 голос
/ 08 января 2010

Рассматривали ли вы попытку перегрузки:

someAppDomain.CreateInstanceFrom(string assemblyFile, string typeName)

Учитывая, что вы знаете новое имя библиотеки DLL, поскольку вы сделали переименование, вы можете попросить домен приложения создать экземпляр из указанной библиотеки DLL. Таким образом, .Net не должно волновать, совпадают ли имя сборки и имя файла сборки.

Мне следовало бы предвосхитить это словами: «Я на самом деле не пробовал», но это всего лишь предложение!

...