如何清除Expression Blend 4缓存的解决方案信息



我似乎很擅长在启动时使Expression Blend 4崩溃。这个问题似乎与初始化静态托管和非托管变量的死锁有关,因为Blend首先打开了我的解决方案,该解决方案混合了非托管C++和托管代码项目。Blend在实例化我的ViewModel时崩溃(我在App.xaml中使用MVVM Light,但我认为这并不是真正相关的)。本页详细介绍了如何检测和纠正这种潜在的死锁:混合程序集的初始化

由于我同时在VS2010和Blend4中编写代码和标记,我有时会意外地创建这种情况,然后Blend在加载我的解决方案时崩溃。即使我在VS2010中纠正了这个问题,Blend启动崩溃仍然存在(VS2010似乎不会在导致Blend崩溃的同一解决方案文件上崩溃)。Blend启动崩溃可能发生在x86和x64系统上。即使我尝试删除所有输出目录,Blend启动崩溃仍然存在。即使我重命名为"C:\Users\username\AppData\Local\Microsoft\Expression\Blend",Blend启动崩溃仍然存在。

我的问题是:如何将Blend重置为从未见过此解决方案的状态?

我认为这是一个有效的解决方法,因为如果我从源代码管理下载一个新的、新的源代码副本,并修复了托管/非托管问题,它就会加载到Blend4中,构建并运行得很好。

Blend崩溃的主要原因是,当初始化UI组件时,它实际上运行了它们的构造函数,该构造函数可以有一些代码,例如访问数据库,而Blend不支持DB访问,因此它可能会崩溃。

因此,有两种方法可以找到潜在的问题。

注释掉UI元素构造函数中除InitializeComponent()之外的所有代码,以找出有问题的代码

将Visual Studio调试器附加到Blend,然后重新生成项目或打开包含Blend 的XAML文件

要执行第二个选项,您可以转到"调试器"->"附加到进程"->从列表中选择"混合"。

当你识别出导致Expression Blend崩溃的代码时,只要有一个if语句,它就会停止运行代码,如果是Blend试图执行它,如果它不只是运行它

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
}

希望这能有所帮助。

最新更新