Как очистить данные кэшированного решения Expression Blend 4? - PullRequest
3 голосов
/ 20 марта 2012

Мне кажется, что при запуске происходит сбой Expression Blend 4.Кажется, что проблема связана с тупиком, инициализирующим статические управляемые и неуправляемые переменные, поскольку Blend сначала открывает мое решение, в котором есть смесь проектов неуправляемого C ++ и управляемого кода.Blend дает сбой при создании экземпляра моей ViewModel (я использую MVVM Light в App.xaml, но я думаю, что это не совсем актуально).На этой странице подробно описывается, как обнаружить и исправить этот потенциальный тупик: Инициализация смешанных сборок

Поскольку я пишу код и разметку одновременно в VS2010 и Blend4, я иногда случайно создаю этуситуации, и после этого Blend падает при загрузке моего решения.Сбой запуска Blend сохраняется, даже если я исправляю проблему в VS2010 (VS2010 кажется невосприимчивым к сбою в том же файле решения, который вызывает Blend).Сбой запуска Blend может произойти как на x86, так и на x64 системах.Сбой запуска Blend сохраняется, даже если я пытаюсь удалить все выходные каталоги.Сбой запуска Blend сохраняется, даже если я переименую "C: \ Users \ имя пользователя \ AppData \ Local \ Microsoft \ Expression \ Blend".

Мой вопрос: как мне переустановить Blend в состояние, как если бы оно никогда не видело это решение раньше?

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

1 Ответ

2 голосов
/ 29 марта 2012

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

Есть два способа найти потенциальную проблему.

Закомментируйте весь код в конструкторе ваших элементов пользовательского интерфейса, кроме InitializeComponent (), чтобы найти проблемный код

Или

Прикрепите Visual Studio Debugger к Blend, а затем пересоберите проект или откройте XAML-файл, который очищает blend

. Для того, чтобы выполнить 2-й вариант, вы должны перейти в Debugger -> присоединиться к процессу -> выбрать Blend из списка.

Когда вы идентифицируете код, который дает сбой Expression Blend, просто есть оператор if, который прекратит выполнение кода, если смесь пытается его выполнить, и если он не просто запустит его.Так что-то вроде этого:

if(DesignerProperties.IsInDesignModeProperty)
{
  // This code will run when Blend renders the controls
}
else
{
  // This code will run when you are running application on it's own
}

Надеюсь, это поможет.

...