Устранение неполадок в плохом конструкторе в Visual Studio 2010

  1. Повесть о двух платформах
  2. Где вы нашли это?!
  3. Включая ссылки с ReSharper
  4. Дизайнерские сборки
  5. Пошаговое руководство. Решение проблемы в конструкторе

Любой, кто использовал Visual Studio 2010 для нетривиального проекта Windows Forms, сталкивался с ситуациями, когда дизайнер больше не может быть открыт. Обычно это происходит потому, что класс встречает исключения с нулевой ссылкой при обращении к данным, которые недоступны до времени выполнения. Это легко исправить: просто избегайте ссылки на эти данные в конструкторе или подпрограмме загрузки в режиме разработки.

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

Если хотите, в конце этой статьи есть пошаговое руководство - со скриншотами! - в нем показано, как решить даже самые сложные задачи дизайнера.

Повесть о двух платформах

Одна из проблем заключается в том, что многие разработчики перешли на 64-разрядную версию Windows, чтобы воспользоваться преимуществами более высоких ограничений ОЗУ. Переход на 64-разрядную версию вызывает некоторые проблемы со многими сборками .NET, из-за которых разработчик (то есть, вероятно, ВЫ) не забывает учитывать, что сборка может быть загружена кодом x86 или кодом x64 или какой-либо их комбинацией. Конструктор иногда не сможет загрузить сборку, потому что она была скомпилирована способом, который не может быть загружен средой выполнения, используемой в данный момент конструктором, как явно указано в настройках проекта . Тем не менее, запрос является явным для Visual Studio, но неявным для разработчика.

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

Есть несколько соображений:

  1. Было бы неплохо иметь библиотеки классов, которые могут быть загружены любым исполняемым файлом, а не иметь отдельные версии для x64 и x86.
  2. Было бы также неплохо иметь возможность использовать как можно больше функций отладки среды (например, функция « Редактировать и продолжить» не работает со сборками x64).
  3. Было бы неплохо иметь самый оптимальный исполняемый файл для целевой платформы. (Обычно это означает, что исполняемый файл скомпилирован для непосредственного запуска на цели, но это не обязательно так, как показано ниже.)

Чтобы решить, что делать, лучше всего обратиться к источнику: Microsoft. С этой целью статья AnyCPU Exes обычно доставляют больше хлопот, чем стоят Рик Байерс ( Блоги MSDN ) дает много рекомендаций.

  • : две разные платформы - это в два раза больше тестов. Серверы сборки должны компилировать и запускать тесты для всех конфигураций, потому что могут быть небольшие различия.
  • : текущая версия среды выполнения WOW (Windows-on-Windows) в 64-разрядных системах фактически выполняет код быстрее, чем собственная 64-разрядная среда выполнения. Это все еще верно на момент написания этой статьи.
  • : вышеупомянутые Edit & Continue входят в их число, как и историческая отладка, если вам повезло иметь высокопроизводительную версию Visual Studio.

Принимая во внимание все вышеперечисленные моменты и предполагая, что ваше приложение на самом деле не должно быть 64-разрядным (то есть оно должно работать с большим объемом ОЗУ, чем доступно в 32-разрядном адресном пространстве), лучше всего использовать следующие правила в качестве руководства при настройке параметров сборки и выпуска по умолчанию.

  • Чистые библиотеки классов всегда должны быть скомпилированы для «любого процессора» (т.е. могут быть загружены сборками как x86, так и x64).
  • Исполняемые файлы всегда должны быть скомпилированы как x86.
  • Сборки модульного тестирования также должны быть скомпилированы как x86, чтобы можно было использовать Edit & Continue .

Где вы нашли это?!

После того, как вы правильно настроили конфигурацию сборки и перестроили все, вы избежите многих ошибок во время разработки.

Хотя не все из них.

Visual Studio имеет неприятную привычку загружать сборки, где бы они ни находились, в соответствии с вашими требованиями, независимо от места, из которого вы связались в сборке. Если вы посмотрите в файле проекта для проекта C # Visual Studio (.csproj-файл), вы увидите элемент XML с именем <HintPath> после каждой ссылки на сборку. Имя выбрано соответствующим образом: Visual Studio сначала будет искать сборку в этом месте, но продолжит поиск в другом месте, если ее там нет. Он заглянет в GAC и заглянет в папку bin / Debug или bin / x86 / Debug, чтобы выяснить, можно ли найти что-то, с чем можно связать. Только если сборка нигде не найдена, Visual Studio сдается и фактически выдает сообщение об ошибке.

В Encodo мы полностью прекратили использование GAC, вместо этого полагаясь на локальные папки, содержащие все необходимые сторонние библиотеки. Таким образом, мы пытаемся контролировать конфигурацию сборки и сборки, используемые при загрузке кода в новую среду (например, на сервер сборки). Однако при локальной работе часто бывает так, что среда разработчика намного грязнее среды сервера сборки и должна быть очищена .

Хотя Visual Studio предлагает опцию очистки проекта или решения, она не выполняет то, что вы ожидаете: сборки остаются в папках bin / Debug или bin / x86 / Debug. Мы добавили пакетную команду, которую мы используем для явного удаления всех этих папок, чтобы Visual Studio снова использовала HintPath для поиска своих сборок.

Если вы обнаружите, что переключаетесь между сборками x86 и x64 с любой частотой, вы столкнетесь с ошибками загрузки дизайнера, когда разработчику удастся найти сборку, скомпилированную для неправильной платформы. Когда это происходит, необходимо закрыть Visual Studio, очистить все выходные папки, как описано выше, и заново открыть решение.

Включая ссылки с ReSharper

Последнее замечание о ссылках: если вы принимаете ту же политику, что и в Encodo, очень тщательно указывая расположение всех внешних ссылок, вы должны остерегаться ReSharper. Если ReSharper предлагает «ссылочную сборку X» и «включить пространство имен Y», вам следует вежливо отклонить сборку и ссылаться на нее самостоятельно. ReSharper будет ссылаться на сборку, как и ожидалось, но не будет включать HintPath, поэтому ссылка будет где-то в папке bin / Debug или bin / x86 / Debug и сломается, как только вы очистите все эти каталоги (как будет в случае с сервер сборки).

Дизайнерские сборки

Это почти всегда работает, но Visual Studio по- прежнему может находить способы загрузки сборок, над которыми у вас практически нет контроля: сборка конструктора .

По всей вероятности, вы не будете включать сборки конструктора в сторонние папки с двоичными файлами по нескольким причинам:

  1. Они не обязательны для компиляции
  2. Обычно они намного больше, чем сборка, которую они поддерживают, и используются только во время разработки
  3. Сборки во время разработки обычно связаны с пакетами визуальных компонентов, которые должны быть установлены в любом случае, чтобы скомпилированный исполняемый файл считался лицензированным.

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

Пошаговое руководство. Решение проблемы в конструкторе

Несмотря на все меры предосторожности, упомянутые выше, все еще возможно иметь плохого дизайнера. Конструктор может быть настолько вредным, что просто отказывается загружаться, не показывая ни стека, ни сообщения об ошибке, сохраняя свои причины при себе. Как мы решаем такую ​​проблему?

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

Дизайнер не загружен Дизайнер не загружен

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

Нет причин и нет стека Нет причин и нет стека

Вверху, прямо посередине, есть небольшая ссылка, которую вы можете попробовать, которая может дать вам больше информации.

Бросьте кости и загрузите их в любом случае Бросьте кости и загрузите их в любом случае

Дизайнер постарается напугать вас в последний раз, прежде чем отказаться от своих драгоценных секретов; игнорируй это.

Что тебе терять Что тебе терять?

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

Загрузить предупреждения Загрузить предупреждения

Текст немного плотный, но сразу появляется одна вещь:

Почему ты вообще там смотришь Почему ты вообще там смотришь?

Похоже, что Visual Studio проверяет некоторое кэшированное расположение в настройках вашего приложения, чтобы найти ссылки на сборки и их сборки конструктора. Это немного странно, поскольку Visual Studio получил явную инструкцию загружать эти сборки из сторонней папки, которую мы тщательно подготовили выше. Возможно, этот кэш представляет собой еще одно место, которое необходимо периодически очищать вручную, чтобы обеспечить бесперебойную работу дизайнера.

[A] DevExpress.XtraLayout.LayoutControl нельзя преобразовать в [B] DevExpress.XtraLayout.LayoutControl. Тип A происходит от 'DevExpress.XtraLayout.v10.2, Версия = 10.2.5.0, Culture = нейтральный, PublicKeyToken = b88d1754d700e49a' в контексте 'LoadNeither' в местоположении ' C: \ Documents and Settings \ Marco \ Local Settings \ Application Data \ Microsoft \ VisualStudio \ 10.0 \ ProjectAssemblies \ kn8q9qdt01 \ DevExpress.XtraLayout.v10.2.dll '. Тип B происходит от 'DevExpress.XtraLayout.v10.2, Версия = 10.2.4.0, Culture = нейтральный, PublicKeyToken = b88d1754d700e49a' в контексте 'По умолчанию' в расположении 'C: \ WINDOWS \ Assembly \ GAC_MSIL \ DevExpress.XtraLayout.v10 0,2 \ 10.2.4.0__b88d1754d700e49a \ DevExpress.XtraLayout.v10.2.dll.

Однако, это окажется погоней за гусем. Проблема не в расположении сборок, а в версии. Мы видим, что дизайнер пытался загрузить версию 10.2.4.0 сторонней библиотеки компонентов для DevExpress. Однако решение и все проекты ссылались на версию 10.2.5.0, которая не была официально установлена ​​на этой рабочей станции. Он был неофициально доступен, так как сборки были включены в стороннюю папку с локальным решением, а файлы конструктора - нет.

Вместо того, чтобы просто показать сообщение об ошибке, что нужная версия требуемой сборки не может быть загружена, Visual Studio вместо этого предпочла сначала достаточно хорошо скрыть предупреждения, а затем не упомянуть реальную причину, по которой сборка не может быть загружена (т.е. конфликтует с более новой версией уже в памяти). Вместо этого, разработчик оставил разработчику возможность решить, что в сообщении об ошибке упоминаются только версии, более старые, чем текущая.

Оттуда быстрая проверка установленных программ и GAC подтвердила, что требуемая версия не была установлена, но решение было совершенно неочевидным.

Это все, что касается советов по устранению неполадок в Visual Studio Designer. Надеемся, что они будут достаточно полезны, чтобы предотвратить по крайней мере некоторые волосы от рвания и некоторых клавиатур от попадания через дисплеи.

Похожие

PlayBuzz - это следующий Buzzfeed?
... веб-сайт в США и седьмой по популярности среди мобильных устройств. Познакомьтесь с Шаулом Ольмертом, человеком, стоящим за PlayBuzz. Возможно, вы не слышали о техническом предпринимателе Шауле Ольмерте, но его двухлетний веб-сайт теперь 29-е место по популярности сайт в Америке. Его небольшая тель-авивская компания работает PlayBuzz.com
Мемориальная доска с посвящением на скамейках в парке Олвишка. Вы можете иметь это, и вы
Семнадцать человек уже стали покровителями парка Олива. Именно их тарелки украшали скамейки в самом красивом саду Гданьска. «Хорошего дня» - одно из посвящений. Ценные пещерные жемчужины
Время автономной работы ручки Microsoft Surface Pro 4 (SP4) и устранение неполадок
Поверхность Pro 4 Стилус. Microsoft Surface Pro 4 имеет дополнительный стилус, который называется Surface Pen. Поверхностное перо - это активное перо со сменным наконечником. Ручка работает по технологии Bluetooth и питается от одной батареи типа AAAA (Quad A).
Как тестировать переводы на многоязычных платформах
... стирования тестер может столкнуться с множеством различных проблем. Неуказанные требования, проблемы производительности и удобства использования являются типичными примерами таких проблем. Каждый хочет, чтобы веб-сайты или приложения были «удобными для пользователя», то есть простыми в использовании и обслуживании. Вопрос в том, как достичь этой цели, когда вам нужно проверить несколько страниц и мобильное приложение для разных языковых версий. Это было серьезной проблемой
Играйте в Command and Conquer Generals на своем современном ПК
Приносим извинения за неудобства, но не могли бы вы отключить блокировку рекламы? Наши объявления актуальны и ненавязчивы, они появляются только сверху и сбоку, а не в содержании.
TIM SA Мы отправляем продукцию в течение 24 часов
... видуальные условия ценообразования Смотрите детали предложить 75 тысяч продукты отслеживание груза история заказов и счета Смотрите детали Что вы получаете, делая покупки в TIM SA? Самый широкий ассортимент продукции в отрасли. Более 75 тысяч индексы с наличием на складе и готовые к отправке в течение
Сегодня стартует официальная продажа нового Xperia XZ3. По этому случаю Sony подготовила очередной ...
Сегодня стартует официальная продажа нового Xperia XZ3. По этому случаю Sony подготовила очередной выпуск программы Fantester и подарок для киноманов. Сегодня начались официальные продажи нового смартфона Sony.
[Решено] Как исправить проблемы с Bluetooth на iOS 11/12
Новая система iOS всегда идет с новыми проблемами, для пользователей, которые обновляют свои iPhone / iPad / iPod до бета-версии iOS 12 или iOS 11.4 / 11.3 / 11.2, большинство из них столкнется с некоторыми проблемами. Если вы являетесь пользователем Bluetooth, вас также может раздражать, что с iOS 11/12 также возникают проблемы с Bluetooth .
Создание нескольких страниц с навигационными меню
... ступление В этой статье Учебная программа по веб-стандартам мы поговорим о навигации по сайту и меню. Вы узнаете о различных типах меню и о том, как создавать их в HTML. Мы также коснемся темы юзабилити и доступности меню. Мы пока не будем вдаваться в стилизацию меню, но эта статья заложит основы. Есть примеры кода
Удаление вируса iPhone (Руководство по удалению) - обновлено июль 2019 г.
Вирус iPhone - это термин, используемый для описания вредоносных программ, которые влияют на устройства iPhone. Вирус iPhone может незаметно проникнуть в систему и работать в фоновом режиме без предварительного уведомления. Вирус iPhone
Circle by Disney - Обзор родительского контроля
... вел последний год или около того, экспериментируя с Круг с диснеем устройство родительского контроля, используемое для управления интернет-активностью на всех устройствах в вашем доме. Да, все устройства. Ну, я должен сказать, все подключенные к интернету устройства. Их много - компьютеры, ноутбуки, телефоны, планшеты, игровые системы - если он подключается к Интернету, Circle может помочь вам в этом.

Комментарии

Если вы найдете решение, можете ли вы поместить его в комментарии для других пользователей?
Если вы найдете решение, можете ли вы поместить его в комментарии для других пользователей? Если у вас есть другие вопросы, вы также можете оставить комментарий.
Как это случилось, спросите вы?
Как это случилось, спросите вы? «Это потрясающе. Быть удостоенным чести вашей страны - одна из самых высоких вещей. Я не рыцарь, я офицер совершенно высшего ранга. Я был действительно взорван. Я до сих пор не знаю, что сказать. Я очень благодарен. Приятно, когда тебя поддерживает твоя страна. Я
Сколько вариантов вы должны дать пользователям одновременно?
Сколько вариантов вы должны дать пользователям одновременно? Еще одна проблема, которую стоит рассмотреть, это то, сколько вариантов вы хотите дать посетителям. Многие меню, которые вы видите в сети, пытаются обеспечить доступ к каждой странице сайта из одного меню. Вот тут-то и появляются сценарии и хитрость CSS - вы можете сделать меню более управляемым, скрывая определенные части, пока пользователи не выберут определенные области (меню при переходе, как их иногда называют). Это умно
Хотите, чтобы это обращение исчезло навсегда?
Хотите, чтобы это обращение исчезло навсегда? Поддержите нас на Patreon, и мы сделаем это! Нажмите на кнопку слева, чтобы узнать больше. "Я не использую блокировщик рекламы!" - Обновите / перезагрузите страницу, если вы все еще видите панду или у вас есть другие проблемы, тогда нажмите здесь, чтобы немедленно связаться с нами, спасибо. "Почему вы это делаете?" - Честно говоря,
Любой другой инструмент для восстановления пароля Excel, который вы используете, который вы хотели бы упомянуть?
Любой другой инструмент для восстановления пароля Excel, который вы используете, который вы хотели бы упомянуть? Оставить комментарий! Наслаждайтесь!
Вы уверены, что рейтинг страницы исчез?
Вы уверены, что рейтинг страницы исчез? Каково было значение для позиционирования раньше? Прочитайте и узнайте ответ на эти вопросы. Что такое рейтинг страницы? Это первый рейтинг сайтов Google, с которым обычно сталкивается каждый владелец сайта, желая позиционировать его. Page Rank появился в 1998 году, его создали основатели Google - Ларри Пейдж и Сергей Брин. Он был рассчитан автоматически по запатентованному алгоритму и был разработан для надежной
Вы планируете начать свой собственный бизнес в Токио?
Вы планируете начать свой собственный бизнес в Токио? Если это так, то вам наверняка захочется посетить Токийский универсальный центр по созданию бизнеса, известный как TOSBEC. Открытие бизнеса в столице Японии и крупнейшем городском районе когда-то предусматривало посещение нескольких правительственных
У вас также есть срочная задача по переводу и вы не знаете, кому их поручить?
У вас также есть срочная задача по переводу и вы не знаете, кому их поручить? Напишите нам - мы подберем для вас идеальное решение и представим привлекательное предложение. Переводы немецкого Познани - уточните, почему мы должны доверять переводам профессиональный совет - мы всегда
У вас есть XML-документ в качестве аспекта DOM, но что, если вы хотите, чтобы он использовался как узел, отсылаемый для обработки XQuery?
У вас есть XML-документ в качестве аспекта DOM, но что, если вы хотите, чтобы он использовался как узел, отсылаемый для обработки XQuery? NetKernel будет делать это на лету с помощью процесса, называемого transreption (преобразование представления). REST для разработчиков Java Серия из четырех частей, написанная Брайаном Слеттеном: Это понятие, применимое к системам REST в целом, освобождает вас от необходимости тратить годы на определение общих схем, которые
А какими приложениями / сайтами для проверки своих знаний пользуетесь вы?
А какими приложениями / сайтами для проверки своих знаний пользуетесь вы? Ждем комментарии! Понравился материал? Поделись им! Добавить комментарий
Но что делать с ним, после того, как вы его купили и привезли домой?
Но что делать с ним, после того, как вы его купили и привезли домой? Ведь любой компьютер состоит из отдельных устройств. Каким образом их подключить? Базовая конфигурация компьютера Базовая конфигурация компьютера включает системный блок, монитор, клавиатуру и мышь. Кроме того, к компьютеру могут подключаться различные периферийные устройства: принтер, колонки, сканер и тому подобное. системный блок Основные модули компьютера

Где вы нашли это?
Как мы решаем такую ​​проблему?
Что тебе терять?
Видуальные условия ценообразования Смотрите детали предложить 75 тысяч продукты отслеживание груза история заказов и счета Смотрите детали Что вы получаете, делая покупки в TIM SA?
Если вы найдете решение, можете ли вы поместить его в комментарии для других пользователей?
Как это случилось, спросите вы?
Как это случилось, спросите вы?
Сколько вариантов вы должны дать пользователям одновременно?
Хотите, чтобы это обращение исчезло навсегда?
Почему вы это делаете?