2014-10-16 93 views
0

我在Windows窗體中使用自定義控件。自定義控件的dll安裝在GAC中。我已將此自定義控件添加到我的工具箱中。從winforms工具箱添加控件拋出錯誤

當我拖到從工具箱到的WinForms設計師,我得到以下錯誤此自定義控件:

Failed to create component 'UserControl'. The error message follows: 'System.Runtime.InteropServices.COMException (0X80004005): Error HRESULT E_FAIL has been returned from a call to a component.

at VSLangProj.References.Add(String bstrPath) ...................................

這工作:

1)將裝配到工具箱和拖動一個局部引用它的形式工作正常。

2)添加到項目中也解決了問題

問題DLL的引用:

我怎樣才能讓我的用戶控制顯示在設計時組件添加到GAC?是否錯過了AssemblyInfo.cs文件中的任何參數或者我錯過了什麼。

編輯:

在進一步的分析,我發現,如果DLL中不存在所提供的位置會發生這種錯誤。例如,如果我將d:\Location1\UserControl.dll的程序集添加到工具箱中,則在拖動控件時,如果在將該DLL添加到工具箱後將其從該位置移除,則會引發此異常。

因此,我使用visual studio developer命令提示符檢查了這個程序集是否仍然存在於GAC中,並且發現該dll存在於GAC中。但仍然無法找到爲什麼異常拋出

+0

在Visual Studio可以找到它們的地方提供依賴的DLL當然是一個很難的要求。摸索這通常不會產生這樣一個絕望的模糊例外。如果您想深入研究,則啓動Visual Studio的另一個實例,使用工具+附加到進程以將其附加到第一個實例,使用Debug + Exceptions,Thrown複選框在拋出異常時強制調試器進入。 Call Stack窗口應該提供一些提示,請記住它被埋在設計器代碼中,因此它不一定是水晶。 – 2014-10-16 13:34:42

+0

@HansPassant,感謝您的建議將嘗試 – Kira 2014-10-17 03:55:50

+0

@HansPassant,它不會在這個設計時間中斷例外 – Kira 2014-10-17 04:05:05

回答

0

我試圖重現您的方案。我在工具箱中創建了一個新的GAC選項卡,並且將dll從其'GAC位置拖放到該選項卡,而不是將其部署到GAC的驅動器上的原始位置(如果我理解正確的話)。沒有任何錯誤。使用Microsoft Visual Studio 2010 Ultimate,版本10.0.40219.1 SP1Rel,Microsoft .NET Framework版本4.5.50938 SP1Rel。

+0

感謝您的嘗試,您是否在點擊「選擇項目」選項後出現的工具箱對話框中檢查目錄選項卡。目錄選項卡將顯示「全局程序集緩存」,如果該控件是從GAC添加的,或者是某個位置添加到了dll,如果手動添加 – Kira 2014-10-17 03:54:13

相關問題