我似乎善于使Expression Blend 4在启动时崩溃。这个问题似乎与初始化静态托管和非托管变量的死锁有关,因为Blend首先打开我的解决方案,其中包含非托管C ++和托管代码项目。 Blend崩溃实例化我的ViewModel(我在App.xaml中使用MVVM Light,但我认为这不是真的相关)。此页面详细介绍了如何检测并纠正此潜在的死锁:Initialization of Mixed Assemblies
由于我同时在VS2010和Blend4中编写代码和标记,我有时会意外地创建这种情况,然后在加载我的解决方案时Blend崩溃。即使我在VS2010中纠正了问题,Blend启动崩溃仍然存在(VS2010似乎不会在同一解决方案文件崩溃时崩溃)。 Blend启动崩溃可能发生在x86和x64系统上。即使我尝试删除所有输出目录,Blend启动崩溃仍然存在。即使我重命名“C:\ Users \ username \ AppData \ Local \ Microsoft \ Expression \ Blend”,Blend启动崩溃仍然存在。
我的问题是:如何将Blend重置为某种状态,就像之前从未见过这种解决方案一样?
我认为这将是一个有效的解决方法,因为如果我从源代码控制下载一个新的,我的源代码的新副本并修复了托管/非托管问题,它会在Blend4中加载,构建并运行得很好。
答案 0 :(得分:2)
Blend崩溃的主要原因是,当Intialising UI组件实际运行它们的构造函数时,它可以有一些代码,例如访问数据库,Blend不支持数据库访问,因此它可能会崩溃。
因此,有两种方法可以找到潜在的问题。
注释除了InitializeComponent()之外的UI元素的构造函数中的所有代码,以找出有问题的代码
或者
将Visual Studio调试器附加到Blend,然后重建项目或打开混合的XAML文件
要做第二个选项,你会去调试器 - >附加到流程 - >从列表中选择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
}
希望这有帮助。