1

.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}" が含まれており、クライアント マシンで正常に動作します。

これらのスタイルはすべて、1 つのファイル ControlStyles.xaml にあります。omboBoxStyle は、いくつかの Web サイトからコピーされた、次のような変更されたスタイルです

Style="{StaticResourceomboBoxStyle}" によって一部の特定のマシンでのみアプリがクラッシュするのはなぜですか? また、このバグを修正する方法を教えてください。

4

1 に答える 1

1

同じ問題が発生し、2日間髪を抜いた後、C#IRCチャネルの誰かの助けを借りてWindbgを使用して解決策を見つけました。

したがって、私の場合、app.configのトレースリスナーのtype属性を設定しておらず、XAMLとは関係がないため、例外がスローされました。ただし、奇妙なことに、XAMLでコンボボックスバインディングを削除すると、実行できました。プログラムはリリースモードですが、実際の解決策はapp.configにあります。ただし、デバッグモードでプログラムを正常に実行できました。これは、コンパイラの厄介なバグのように聞こえます。

したがって、app.configで見落としの可能性を探し、すべてが正しいと思われる場合は、Windbgを取得して、例外の根本的な原因が見つかるまで自分でデバッグします。

于 2013-02-01T11:45:44.967 に答える