2016-07-14 8 views
-1

Ich arbeite an einem Projekt, das auf .NET 4.5 erstellt wird, das auf .NET verweist, das auf .NET 3.5 erstellt wird.ApplicationClass.Documents.Open werfen System.InvalidCastException

Dieser Fehler ist zuvor aufgetreten und mein Kollege konnte eine Lösung finden, die das Hinzufügen oder Entfernen eines Registrierungsschlüssels beinhaltete, aber er kann sich nicht erinnern, wie er die Lösung gefunden hat.

Es gibt auch eine Menge Hub-Bub auf dieser Seite und im Internet darüber, wie man sich um diese Ausnahme kümmert, und es könnte nett sein, eine generische Lösung zu finden, wenn es möglich ist. Hier

ist, was ich weiß: dieser Fehler durch die folgende Codezeile ausgelöst wird:

ApplicationClass AC = new ApplicationClass();

Ich habe an anderer Stelle, dass die Verwendung des ApplicationClass lesen jetzt ist verpönt, aber es gibt nicht viel ich kann zu diesem Zeitpunkt daran arbeiten, da die DLL, in der sie verwendet wird, in mehreren Anwendungen verwendet wird, die ich nicht anfassen kann.

Wie auch immer, das Problem ist, dass nach dem Ausführen dieser Zeile, jedes AC-Felder nicht initialisiert werden, sondern sie werfen eine System.InvalidCastException.

Dies verursacht jedoch kein Problem an sich. Es ist nur, wenn die folgende Zeile ausführen, dass die tatsächliche Ausnahme, die das Problem verursacht geworfen wird:

AC.Documents.Open(filePath, true);

Unterhalb der Fehler, die durch die äußere Anwendung ausgelöst wird, läuft auf .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() 

Kann jemand dieses Problem lösen? Ich habe Methoden von anderen Threads auf StackOverflow vergeblich ausprobiert und würde jede Hilfe sehr schätzen!

+0

Es scheint, dass Sie COM verwenden. Hast du die COM dll registriert? – seairth

Antwort

-1

Dies wurde durch das Entfernen der Version, an der ich arbeitete (Version 1.2), die Installation und Deinstallation der vorherigen Version (v1.1) und die anschließende Neuinstallation von Version 1.2 gelöst.

Ich habe versucht, die DLLs manuell registrieren, die ich mit regasm.exe verwendet, aber es würde nicht aus irgendeinem mir unbekannten Grund registrieren.

Kurzform: Installieren Sie die vorherige Version, damit die erforderlichen DLLs registriert werden.

Verwandte Themen