我们正在为 .NET 4 开发 WPF 应用程序。
有一天,客户告诉我,新版本在他的 Windows 7 机器上不起作用(应用程序在启动时退出),他在 Windows 事件查看器中发现了异常日志:
Application: myapp.exe Framework Version: v4.0.30319 Description:
The process was terminated due to an unhandled exception. Exception Info: System.Windows.Markup.XamlParseException
Stack: at System.Windows.Markup.XamlReader.RewrapException(System.Exception, System.Xaml.IXamlLineInfo, System.Uri)
at System.Windows.Markup.WpfXamlLoader.Load(System.Xaml.XamlReader, System.Xaml.IXamlObjectWriterFactory, Boolean, System.Object, System.Xaml.XamlObjectWriterSettings, System.Uri)
at System.Windows.Markup.WpfXamlLoader.LoadBaml(System.Xaml.XamlReader, Boolean, System.Object, System.Xaml.Permissions.XamlAccessLevel, System.Uri)
at System.Windows.Markup.XamlReader.LoadBaml(System.IO.Stream, System.Windows.Markup.ParserContext, System.Object, Boolean)
at System.Windows.Application.LoadBamlStreamWithSyncInfo(System.IO.Stream, System.Windows.Markup.ParserContext)
at ... (I guess no point to continue...)
这个问题让我发疯,因为我和其他开发人员都无法在我们的机器上重现它,即使在 VirtualBox 中安装干净的 Windows 7 也无法重现它。
当我们试图找到破坏客户端应用程序的更改时,我们发现了有问题的部分。这是区别:
这工作正常:
<ComboBox x:Name="comboBoxZoom" Margin="130,10,0,0" HorizontalAlignment="Left" Width="40" FontFamily="Arial" FontSize="12" VerticalAlignment="Top" TabIndex="1" Panel.ZIndex="2" />
这打破了:
<ComboBox x:Name="comboBoxZoom" Style="{StaticResource comboBoxStyle}" Margin="130,10,0,0" HorizontalAlignment="Left" Width="40" FontFamily="Arial" FontSize="12" VerticalAlignment="Top" TabIndex="1" Panel.ZIndex="2" />
本质上的区别只是
Style="{StaticResource comboBoxStyle}"
但是这种风格之前已经在我们应用程序的其他部分中使用过,没有任何问题!导致此异常的同一文件包含许多其他 Style="{StaticResource someotherstyle}" 并且它们在客户端计算机上工作正常。
所有这些样式都位于一个文件 ControlStyles.xaml 中。comboBoxStyle 是从某个网站复制的修改样式,类似于此: http ://social.msdn.microsoft.com/Forums/nl/wpf/thread/53134b87-1a99-4998-a1fb-b3d8a9bd2773
为什么 Style="{StaticResource comboBoxStyle}" 使我的应用程序仅在某些特定机器上崩溃以及如何修复此错误?