Программный сбой Visual Studio при обнаружении ошибок XAML при инициализации - PullRequest
4 голосов
/ 04 января 2011

В последнее время у меня возникли серьезные проблемы с Visual Studio 2010.Это происходит специфическим сбоем, когда я сталкиваюсь с определенными типами ошибок XAML во время InitializeComponent() элемента управления / окна.

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

alt text

Нет всплывающих окон или сведений Anywhere о том, что не так, только стек вызовов, который указывает на мой InitializeComponent() вызов.

Теперь обычно я просто делаю метод проб и ошибок, чтобы решить эту проблему, и выясняю, где я ошибся, но настоящая проблема не в моем коде.На этом этапе Visual Studio совершенно бесполезен .Он сообщает, что мое приложение все еще находится в режиме «Запуск».Кнопки Stop / Break / Restart на панели инструментов или в меню ничего не делают (но выделяются серым цветом).

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

Я должен принудительно закрыть devenv.exe, и после этого 3-4 раза подряд это много потерянного времени (поскольку мои проекты обычно довольно большие, а студия может быть довольно медленной при загрузке).

В точку

  1. Кто-нибудь еще сталкивался с этим?
  2. Как остановить блокировку студии.
  3. Могу ли я по крайней мере получить информацию от этого зверя другим способом, чтобы я мог быстрее исправить свою ошибку XAMLа не после 3-4 компиляций проб и ошибок, приводящих к одному и тому же сбою?

Любая и вся помощь будет принята.

Версия Visual Studio 2010: 10.0.30319.1RTM

Редактировать & Update

FWIW, в основном ошибки, которые вызывают это XamlParseExceptions (я понял это после того, как обнаружил, что не так с моим XAML).

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

Особая ошибка на изображении выше, которая на 100% наверняка привела к этому, была XamlParseException, вызванной забыванием атрибута Value в данныхтриггер.

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

Код, который вызовет эту проблему (по крайней мере, для меня)

Это базовый шаблон WPF-приложения со следующим Window.xaml кодом.Проблема в том, что в шаблоне отсутствует Value="True" на <DataTrigger ...>.Он генерирует XamlParseException и сбои Visual Studio, как описано выше при отладке.

<Window x:Class="XamlParseExplosion.MainWindow"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   Title="MainWindow" Height="350" Width="525">
  <Window.Resources>
   <DataTemplate x:Key="BankListItemTemplate">
    <Border x:Name="ItemBorder" Width="250" Margin="1" BorderBrush="Blue" BorderThickness="5,0,0,0">
     <Grid>
      <Label Content="{Binding Name}" />
     </Grid>
    </Border>
    <DataTemplate.Triggers>
     <DataTrigger Binding="{Binding IsDirty}">
      <Setter TargetName="ItemBorder" Property="BorderBrush" Value="Red" />
     </DataTrigger>
    </DataTemplate.Triggers>
   </DataTemplate>
  </Window.Resources>
  <Grid>
   <ListView ItemTemplate="{StaticResource BankListItemTemplate}" />
  </Grid>
 </Window>

Заключительные замечания

Следующие решения не помогите мне:

  1. Перезапуск Visual Studio
  2. Перезагрузка
  3. Переустановка Visual Studio
  4. Отключение надстроек, таких как ReSharper & Reflector

Обновление (позже) с ответом

Я хочу добавить к этому (как псевдо-ответ), потому что позже я узнал об этом больше информации, которую я хочу передать людям, находящим этовопрос в Google.

Реальная проблема: XamlParseException был выбран в Debug -> Исключения, чтобы прерваться, когда это происходит, потому что это происходит во время подключения WPF, vstudio не может правильно его перехватить (обычно этоупасть еще на пару уровней и быть обработанным там, где vstudio может с этим справиться).

Просто выключите это, и жизнь снова станет хорошей.

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

Ответы [ 8 ]

2 голосов
/ 29 октября 2012

Просто была похожая проблема, и перечисленные выше ответы не сработали для меня. Я опубликую свое решение здесь на случай, если это случится с другими. У меня было окно с подозрительным xaml, которое при попытке открыть вкладку окна в VS вызывало его каждый раз. Круто, когда вы хотите попасть туда, чтобы удалить плохой код! Простое решение: откройте файл xaml в блокноте, удалите неверный код, а затем пересоберите его в VS. Просто, но у меня получилось.

1 голос
/ 28 июля 2011

У меня была похожая проблема.После нескольких часов у меня появилась идея начать визуальную студию в качестве администратора.Исправлена ​​проблема, но до сих пор не знаю, почему.

1 голос
/ 04 января 2011

Вероятно, сбой при инициализации встроенного UserControl. Посмотрите, как обрабатываются свойства DependencyProperties этого элемента управления.

0 голосов
/ 09 декабря 2011

Это также случилось со мной.Я могу воспроизвести проблему каждый раз при наличии простого сценария:

<UserControls:OperationLoader
              DepProperty1="{Binding VMProperty1}"
              DepProperty2="{Binding VMProperty2, Converter={StaticResource boolToInverse}}}"/>

Если я удаляю часть преобразователя, все работает просто отлично.Вероятно, проблема в реализации конвертера, которая выглядит следующим образом:

public sealed class BooleanToInverseConverter : BooleanConverter<bool>
{
    public BooleanToInverseConverter() :
        base(false, true)
    {
    }
}
0 голосов
/ 22 февраля 2011

Измените драйверы вашей видеокарты. Либо обновите их, либо верните драйверы, поставляемые Microsoft.

На своем рабочем компьютере я вернулся к встроенному видеоадаптеру Intel, и Visual Studio и Windows Explorer больше не вылетали.

См.

0 голосов
/ 12 января 2011

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

Что касается повторяющихся сбоев, я предлагаю отправить отчет в MicrosoftПодключите, если вышеперечисленное не работает.

0 голосов
/ 08 января 2011

Нечто подобное произошло со мной в файле aspx, проект на MOSS.Была одна строка, которая каждый раз вызывала сбой VS.Я понял, что единственным решением было удалить строку и добавлять ее только тогда, когда файл не был открыт в VS.

Вы проверяли формат файла, я имею в виду, это правильный файл Unicode / Ansi / etc?Проверьте это на двоичном уровне.

Попробуйте открыть новый проект WPF, за XAML (без кода) и посмотреть, не сработает ли он.Попробовать поймать при инициализации не поможет?

Редактировать: Я пробовал XAML, который вы опубликовали, без ошибок.Та же версия VS.

0 голосов
/ 06 января 2011

Что нужно попробовать:

  • Отключить «помощник по исключениям» в опциях отладки.
  • Отключить «Процесс размещения Visual Studio» в свойствах отладки проекта.

Отличается ли поведение, если вы включаете «разбивать на исключения CLR» в диалоговом окне «Исключения» (Ctrl + Shift +Д) и отключено "Включить только мой код ..."?

...