Добавление управления из панели инструментов winforms вызывает ошибку

Я использую настраиваемый элемент управления в формах Windows. DLL для настраиваемого элемента управления установлена ​​в GAC. Я добавил этот настраиваемый элемент управления в свой ящик для инструментов.

Когда я перетаскиваю этот настраиваемый элемент управления из панели инструментов в конструктор winforms, я получаю следующую ошибку:

Не удалось создать компонент UserControl. Следующее сообщение об ошибке: «System.Runtime.InteropServices.COMException (0X80004005): ошибка HRESULT E_FAIL была возвращена из вызова компонента.

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

Это работает:

1) Добавление локальной ссылки сборки в панель инструментов и перетаскивание ее на форму работает правильно.

2) Добавление ссылки на dll в проекте также решает проблему.

Вопрос:

Как я могу сделать так, чтобы мой пользовательский элемент управления отображался в конструкторе, когда сборка добавлена ​​в GAC? Я пропускаю какие-либо параметры в файле AssemblyInfo.cs или что-то, что мне не хватает.

Редактировать:

При дальнейшем анализе я обнаружил, что эта ошибка произойдет, если dll отсутствует в указанном месте. Например, если я добавляю сборку из d:\Location1\UserControl.dll в панель инструментов, это исключение будет выдано при перетаскивании элемента управления, если я удалю dll из этого места после добавления ее в панель инструментов.

Итак, я проверил, присутствует ли эта сборка в GAC или нет, используя командную строку разработчика Visual Studio, и обнаружил, что dll присутствует в GAC. Но все еще не могу найти, почему выбрасывается исключение


person Kira    schedule 16.10.2014    source источник
comment
Наличие зависимых библиотек DLL в том месте, где Visual Studio может их найти, конечно, является жестким требованием. Попытки найти такие безнадежно расплывчатые исключения обычно не вызывают. Если вы хотите детализировать его, запустите другой экземпляр Visual Studio, используйте Инструменты + Присоединить к процессу, чтобы прикрепить его к первому, используйте флажок «Отладка + Исключения, Выброшено», чтобы заставить отладчик вмешиваться при возникновении исключения. Окно стека вызовов должно давать несколько подсказок, но имейте в виду, что оно скрыто в коде дизайнера, поэтому оно не обязательно кристально чистое.   -  person Hans Passant    schedule 16.10.2014
comment
@HansPassant, спасибо за предложение попробую   -  person Kira    schedule 17.10.2014
comment
@HansPassant, это не нарушает это исключение времени разработки   -  person Kira    schedule 17.10.2014


Ответы (1)


Я пытался воспроизвести ваш сценарий. Я создал новую вкладку GAC на панели инструментов, и я перетаскиваю dll из ее местоположения GAC на эту вкладку, а не из исходного местоположения на вашем диске, с которого она была развернута в GAC (если я правильно понял). Никаких ошибок. Использование Microsoft Visual Studio 2010 Ultimate, версия 10.0.40219.1 SP1Rel, Microsoft .NET Framework версии 4.5.50938 SP1Rel.

person andrei.ciprian    schedule 16.10.2014
comment
Спасибо за попытку, вы проверили вкладку каталога в диалоговом окне панели инструментов, которое появляется после нажатия опции выбора элементов. На вкладке каталога будет отображаться глобальный кэш сборок, если элемент управления добавлен из GAC, или местоположение в dll, если оно добавлено вручную. - person Kira; 17.10.2014