2016-07-14 3 views
-1

Я работаю над проектом, построенным на .NET 4.5, который ссылается на .dll, построенную на .NET 3.5.ApplicationClass.Documents.Open throwing System.InvalidCastException

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

На этом сайте и в Интернете есть много хаба-бэка о том, как позаботиться об этом исключении, и было бы неплохо найти общее решение, если это возможно.

Вот что я знаю: эта ошибка возникает в следующей строке кода:

ApplicationClass AC = new ApplicationClass();

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

В любом случае проблема заключается в том, что после выполнения этой строки каждое из полей AC не инициализируется, вместо этого они вызывают исключение System.InvalidCastException.

Однако это не вызывает проблемы самостоятельно. Только тогда, когда следующая строка выполнения, что фактическое исключение, которое вызывает проблему брошено:

AC.Documents.Open(filePath, true);

Ниже ошибка, которая выбрасывается внешним приложением, запущенным на .NET 4.5.


A first chance exception of type 'System.InvalidCastException' occurred in mscorlib.dll 
2016-07-14 09:40:22 Error 9 System.InvalidCastException: Unable to cast COM object of type 'LabelManager2.ApplicationClass' to interface type 'LabelManager2.IApplication'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{3624B9C3-9E5D-11D3-A896-00C04F324E22}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)). 
    at System.RuntimeType.InvokeDispMethod(String name, BindingFlags invokeAttr, Object target, Object[] args, Boolean[] byrefModifiers, Int32 culture, String[] namedParameters) 
    at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams) 
    at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData) 
    at LabelManager2.ApplicationClass.Quit() 

Кто-нибудь знает, как решить эту проблему? Я пробовал методы из других потоков на StackOverflow безрезультатно и был бы очень признателен за любую помощь!

+0

Похоже, вы используете COM. Вы зарегистрировали COM-dll? – seairth

ответ

-1

Это оказалось разрешимым, удалив версию, над которой я работал (v1.2), установив и удалив предыдущую версию (v1.1), а затем переустановив v1.2.

Я попытался вручную зарегистрировать DLL, которые я использовал с помощью regasm.exe, но он не зарегистрировался по какой-то неизвестной мне причине.

Краткая форма: установите предыдущую версию, чтобы она регистрировала необходимые DLL.

Смежные вопросы