Ошибки при создании подкласса WebPart в другой сборке
-
09-06-2019 - |
Вопрос
Я пытаюсь создать подкласс WebPart, который будет выступать в качестве родительского для любых веб-частей, которые мы создаем.Если я создам пустой класс в том же проекте, я смогу наследовать от него, как и следовало ожидать.Однако, если я попытаюсь поместить его в другую сборку - ту, на которую я смог ссылаться и использовать классы, - я получу следующую ошибку:
Не удалось загрузить один или несколько запрошенных типов.Извлеките свойство LoaderExceptions для получения дополнительной информации.
Другая информация, которая может оказаться уместной (обычно я не являюсь разработчиком SharePoint):Я компилирую библиотеки DLL, ссылаюсь на них из проекта разработки и копирую их в каталог /bin экземпляра SharePoint.Все сборки подписаны.Я пытаюсь выполнить развертывание с помощью функции "развернуть" VS2008.
К сожалению, похоже, что это не специфичная для SharePoint ошибка, и я не уверен, как решить проблему.Кто-нибудь сталкивался с этим и есть ли у вас какие-либо предложения?
Решение
Хорошо, я нашел проблему.Задача упаковки по той или иной причине использует отражение.Когда он обнаруживает, что ваш класс наследуется от класса в другом домене, он пытается загрузить его с помощью отражения.Однако отражение не выполняет политику привязки, поэтому этот домен не загружается.
Авторы упаковочной программы могли бы решить эту проблему, добавив следующий код:
AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += new ResolveEventHandler(CurrentDomain_ReflectionOnlyAssemblyResolve);
Assembly a = System.Reflection.Assembly.ReflectionOnlyLoadFrom(filename);
static Assembly CurrentDomain_ReflectionOnlyAssemblyResolve(object sender, ResolveEventArgs args)
{
return System.Reflection.Assembly.ReflectionOnlyLoad(args.Name);
}
Однако, если вам нужно решение для вашего проекта, просто добавьте сборки в GAC, и он сможет разрешить их.