2016-07-14 68 views
-1

我正在構建.NET 4.5上的一個項目,該項目引用了構建於.NET 3.5上的.dll。ApplicationClass.Documents.Open throwing System.InvalidCastException

之前出現過此錯誤,我的同事能夠找到涉及添加或刪除註冊表項的解決方案,但他無法記住他是如何找到解決方案的。

在這個網站和互聯網上也有很多關於如何處理這個異常的hub-bub,如果可能的話找到一個通用的解決方案可能會很好。

這是我知道的:這個錯誤是由下面的代碼行拋出:

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來解決。

我試圖手動註冊我正在使用regasm.exe使用的DLL,但它不會因爲我未知的某些原因而註冊。

簡寫:安裝以前的版本,讓它註冊必要的dll。