Исключение System.IO.FileNotFoundException при попытке удалить UserControl в форме в конструкторе - PullRequest
1 голос
/ 18 ноября 2008

Я создал пользовательский UserControl в Managed C ++, который оборачивает некоторые собственные элементы управления кодом. Я подтвердил, что элемент управления работает во время выполнения, и пытался заставить элемент управления работать с конструктором Visual Studio, позволяя перетаскивать элемент управления из панели инструментов конструктора.

Хотя я успешно добавил UserControl на панель инструментов, ничего не происходит, когда я перетаскиваю элемент управления в форму окна. Чтобы исследовать проблему, я открыл второй экземпляр Visual Studio 2008 и подключил его отладчик к экземпляру devenv.exe, где я пытаюсь использовать UserControl. После удаления UserControl на формы Windows отладчик Visual Studio выводит исключение FileNotFoundException в mscorlib.dll при попытке загрузить модуль, содержащий UserControl.

Я заметил, что дизайнер не загружает dll из выходного пути проекта, а создает копию сборки в папке% UserData% \ VisualStudio \ 9.0 \ ProjectAssemblies \ RandomFolderName . Однако ни одна из зависимостей модуля не копируется, что, по моему мнению, является источником исключения FileNotFoundException.

Есть идеи, как решить эту проблему? В идеале Vistual Studio будет копировать все зависимости сборки при копировании dll в папку ProjectAssemblies, но я не могу придумать, как это сделать.

Ответы [ 3 ]

1 голос
/ 18 марта 2013

Старый поток, но отправляю свое решение по аналогичной проблеме, так как я только что столкнулся с проблемой и нашел этот вопрос в процессе. Поскольку вы оборачиваете элемент управления, это может быть не так легко исправить, как мое с простым доступом к типам.

По сути, я просто сделал собственные библиотеки DLL с задержкой загрузки в свою оболочку C ++ / CLI. Поскольку часть оболочки C ++ / CLI содержит спецификации интерфейса, используемые Visual Studio и платформой, встроенная DLL никогда не требуется и не загружается. Я ответил на это более подробно в этом вопросе: https://stackoverflow.com/a/15481687/34440

1 голос
/ 18 ноября 2008

Visual Studio не знает ни о какой неуправляемой зависимости. Вам придется скопировать саму dll или скопировать их в каталог windows \ system32.

Две другие стратегии борьбы с этим.

  1. Оберните эту сборку другой сборкой и вручную загрузите вашу смешанную dll с помощью assembly.loadfrom. Эта функция установит правильный каталог загрузки для вашего dll смешанного режима.

  2. В вашей смешанной сборке используйте loadlibrary для загрузки ваших собственных зависимостей dll, чтобы вы могли указать их пути.

0 голосов
/ 18 ноября 2008

Старайтесь не помещать ничего в конструктор элемента управления, который будет обращаться к файлам. Если необходимо, иногда свойство DesignTime помогает пропускать ошибочные строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...