我发布了这个问题,以便我可以记录解决方案,因为我发现解决它非常棘手且耗时。
我在 Silverlight 4 项目中使用了Laurent Bugnion出色的MVVM Light Toolkit,并且我在 Microsoft.Practices.ServiceLocation 中使用了他的ViewModelLocator模式。ServiceLocator为可混合性加载设计时模型。最初在Expression Blend 4中加载视图是有效的,并且设计时数据绑定非常好。这在某个时候停止工作,Blend 中根本没有任何错误消息。
我使用Visual Studio 2010 SP1附加到Blend.exe来调试问题。在这行代码中抛出了EntryPointNotFoundException (Entry point was not found) 异常:
return ServiceLocator.Current.GetInstance<ExampleViewModel>();
奇怪的是,我能够在 Visual Studio XAML 设计器中成功加载相同的视图,而我的设计时数据绑定工作正常。我使用另一个 Visual Studio 实例将调试器附加到托管 XAML 设计器的 Visual Studio 实例,并且能够确认 ServiceLocator 调用已成功执行。
异常详细信息(堆栈跟踪、InnerExcetion 等)没有为我提供有关问题的任何进一步线索,并且对无用错误消息的各种 Internet 搜索未能进一步阐明。
我最终幸运地使用了 Visual Studio 即时窗口来执行导致问题的部分代码行,并得到了更好的错误消息:
?ServiceLocator.Current
“Microsoft.Practices.ServiceLocation.dll”和“Microsoft.Practices.ServiceLocation.dll”中都存在“Microsoft.Practices.ServiceLocation.ServiceLocator”类型
将变更集与之前工作的代码进行比较,我注意到我在Silverlight 项目的单独单元测试框架(它引用了 UI 项目)中添加了对 GalaSoft.MvvmLight.Extras.SL4 的引用。该测试项目从 C:\Program Files (x86)\Laurent Bugnion (GalaSoft)\Mvvm Light Toolkit\Binaries\Silverlight4 引用程序集,而 UI 项目从 ..\packages\MvvmLightLibsPreview.4.0.0\ 引用它库\SL4。我曾使用nuget包MvvmLightLibsPreview将 MVVM Light 添加到客户端项目。
混合结果 - 错误和输出窗口在任何时候都没有显示任何错误消息。显然,除非有一些 Blend 故障排除技术可以帮助我更快地解决问题,否则不需要真正的答案。