Застрял с ошибкой типа "Не удается найти" с помощью CreateInstance()

Я пытаюсь использовать .CreateInstance() в утилите подключения в проекте С# при сериализации XML. .Unwrap() используется для развертывания сериализуемого возвращаемого типа и получения экземпляра типа, который я пытаюсь создать.

String fileToLoad = @"D:\RPMOpen\svnCobra\conversion\aui\Model\bin\Debug\RPM_Model";
String file = Path.GetFileName(fileToLoad);
AbstractResponseMessageData response = 
    (AbstractResponseMessageData)Activator.CreateInstance(file, responseName).Unwrap();

У меня сборка RPM_Model на @"D:\RPMOpen\svnCobra\conversion\aui\Model\bin\Debug\RPM_Model" загружается нормально, но в результате типа ARC_LOGONRS на responseName получаю следующую ошибку:

Ошибка в методе ConnectUtil.Execute: не удалось загрузить тип ARC_LOGONRS из сборки RPM_Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.

Вот почему я застрял на ошибке:

1. я сделал ссылку на сборку, указанную в ошибке.
2. В моем GAC нет ничего, переопределяющего .dll в моей папке /Debug.
3. Я убедился, что у меня правильная версия .dll.
4. .dll не имеет других зависимостей.
5. И мой проект, и DLL имеют одну и ту же целевую платформу.
6. Я знаю, что ссылаюсь на сборку правильно, как если бы я поместил ARCLOGON_RS в свой код и навел на нее курсор, я вижу

класс RPM.Model.Data.ARCLOGON_RS

и я могу f12 сфокусироваться на нем, чтобы увидеть его свойства.
7. Я очистил и перестроил оба решения.
8. Тип имеет общедоступный конструктор по умолчанию, и класс является общедоступным.
9. .dll находится в опорном узле.
10. У меня есть правильное имя сборки, переданное в качестве параметра.

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

Большое спасибо за любую помощь.


person HavelTheGreat    schedule 23.02.2015    source источник
comment
Имеет ли тип общедоступный конструктор по умолчанию?   -  person Rufus L    schedule 24.02.2015
comment
@RufusL Да, извините, забыл, отредактировал вопрос.   -  person HavelTheGreat    schedule 24.02.2015
comment
глупый вопрос, но существует ли DLL в той же папке, что и приложение, которое вы запускаете?   -  person Ahmed ilyas    schedule 24.02.2015
comment
Есть ли внутреннее исключение? Согласно: msdn.microsoft.com/ en-us/library/, причиной может быть DllNotFound, EntryPointNotFound или исключение TypeAccess. По крайней мере, это должно помочь сузить круг.   -  person Rufus L    schedule 24.02.2015
comment
Внутреннее исключение просто указывает мне на строку AbstractResponseMessageData. Из этих трех я бы подумал, что это должно быть EntryPointNotFound, но я понятия не имею, как дальше диагностировать исключение.   -  person HavelTheGreat    schedule 24.02.2015
comment
@Ahmedilyas, и да, это так.   -  person HavelTheGreat    schedule 24.02.2015
comment
Вы проверили, чтобы убедиться, что Dll находится в ссылочном узле.. также проверьте, установлен ли CopyLocal=true.. || stackoverflow.com/questions/7598088/   -  person MethodMan    schedule 24.02.2015
comment
Вы сказали, что конструктор является общедоступным, но является ли класс?   -  person Chris Dunaway    schedule 24.02.2015
comment
@MethodMan .dll находится в эталонном узле, я рассмотрю ваше второе предложение.   -  person HavelTheGreat    schedule 24.02.2015
comment
@ChrisDunaway И да, конструктор общедоступен, обновил вопрос с этой информацией.   -  person HavelTheGreat    schedule 24.02.2015
comment
Что происходит, когда вы вызываете перегрузку Activator.CreateInstance(Type.GetType("RPM.Model.Data.ARCLOGON_RS, RPM_Model", true))?   -  person NightOwl888    schedule 24.02.2015
comment
@NightOwl888 Не удалось загрузить тип RPM.Model.Data.ARCLOGON_RS из сборки RPM_Model.   -  person HavelTheGreat    schedule 24.02.2015
comment
Я спросил, является ли общедоступным класс, а не конструктор. Но я вижу, вы решили свою проблему.   -  person Chris Dunaway    schedule 24.02.2015
comment
@ChrisDunaway Приношу свои извинения, я имел в виду класс, я совершенно не понимаю, почему я набрал конструктор.   -  person HavelTheGreat    schedule 24.02.2015


Ответы (1)


При предоставлении typeName для CreateInstance() мне пришлось жестко закодировать полный тип. Несмотря на то, что моя ошибка выглядит так, как будто она выглядит внутри RPM.Model.Data, как мне бы хотелось, это явно не так. Редактирование responseName на RPM.Model.Data.ARC_LOGONRS вместо простого ARC_LOGONRS было всем, что было необходимо для устранения ошибки.

person HavelTheGreat    schedule 24.02.2015