Это старый вопрос, на который, похоже, все еще нет ответа, будь то здесь или в более широком пуле форумов. Большинство советов относится к неустанным чистым> перестроениям или закрытию> чистых папок> повторному открытию или перезапуску компьютера. У меня нет точного ответа в настоящее время, хотя я провел некоторое исследование и подумал, что могу поделиться. В общем, есть одно местоположение, в которое копируются все файлы конструктора при разработке элемента управления или формы, другое местоположение, в котором могут существовать старые файлы, и описывается метод, позволяющий перехватить все исключения конструктора, прежде чем дизайнер сможет сгенерировать страницу ошибки.
Существует два случая, когда сборка не может быть загружена или не найдена. Первая вызвана тем, что файлы не могут быть скопированы в места, необходимые для дизайнера, а вторая - устаревшими файлами.
Как упомянуто выше, файлы могут не копироваться, когда проект не может напрямую ссылаться на все ссылки, требуемые ссылочными ссылками и их ссылками, рекурсивно, вплоть до каркаса. Этого можно избежать, тщательно отслеживая все ссылки и их иждивенцев, обеспечивая учет всех.
Дизайнер Visual Studio использует специальное место для кэширования DLL для его использования в конструкторе, изолированном от папок source / bin проектов:
Windows XP:
C: \ Documents and Settings \ [имя_пользователя] \ Локальные настройки \ Данные приложения \ Microsoft \ VisualStudio \ 10.0 \ ProjectAssemblies
Windows 7:
C: \ Users \ [имя_пользователя] \ AppData \ Local \ Microsoft \ VisualStudio \ 10.0 \ ProjectAssemblies
В этом месте скомпилированные сборки копируются в динамически созданных папок, по одной папке на сборку. Проверяя даты версии сборки в этом месте, кажется, что она достаточно актуальна и удаляется при выходе из Visual Studio. Все сборки копируются при просмотре конструктора с новыми скомпилированными файлами. Новая копия каждой сборки создается в этом месте для каждого конструктора, поэтому в этом месте может храниться несколько идентичных копий каждой сборки.
Однако существует еще одно место, где сборки могут быть скопированы, и является частью последовательности поиска сборок, очевидно, перед папкой ProjectAssemblies и находится в:
C: \ Program Files \ Microsoft Visual Studio 10.0 \ Common7 \ IDE
Я не знаю, как или когда сборки копируются в это место, но это не часто, поэтому файлы, которые приходят сюда, быстро становятся источником устаревших ссылок. В случае сбоя конструктора с ошибкой «Не удалось загрузить файл или сборку» , версия, запрошенная конструктором, была версией, на которую ссылалась только сборка в этом месте.
Это было обнаружено с помощью отладки второго экземпляра Visual Studio на первом, со всеми загруженными символами .net и всеми известными исключениями, возникающими при броске, а не при обработке. Это позволило второму экземпляру перехватить обработанные исключения дизайнера и выявить местоположение этого файла. Это был итоговый вывод ошибки конструктора, которую я использовал:
=== Pre-bind state information ===
LOG: User = **************
LOG: DisplayName = ***********, Version=1.0.4275.22699, Culture=neutral, PublicKeyToken=null
(Fully-specified)
LOG: Appbase = file:///C:/Program Files/Microsoft Visual Studio 10.0/Common7/IDE/
LOG: Initial PrivatePath = NULL
Calling assembly : ***********, Version=1.0.4275.22699, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe.Config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: The same bind was seen before, and was failed with hr = 0x80070002.