3

私は現在、MySQL.Data と System.Data.Sqlite dll および他のいくつかを利用する C# WPF プロジェクトに取り組んでいます。

このプロジェクトは、開発マシンで問題なく動作する .Net 4 プロジェクトです。MSI インストーラー パッケージを作成し、実行可能ファイルを追加すると、Visual Studio は依存関係を解決し、必要な DLL を EXE と共に追加します。

開発マシンでインストーラーを実行すると、すべて正常に動作します。ただし、インストーラーを .Net Framework 3.5 および .Net Framework 4 がインストールされた空の仮想マシンにコピーすると、インストーラーはすべてが正常にインストールされたと表示し、プログラム ファイル フォルダーを見ると、すべての DLL も存在しますが、ソフトウェアを実行しようとすると、ソフトウェアがロードされず、.Net ランタイム エラーがイベント ビューアーに表示されます。

エラーは次のとおりです

アプリケーション: MySQLBackup.exe フレームワーク バージョン: v4.0.30319 説明: 未処理の例外のため、プロセスが終了しました。例外情報: System.IO.FileLoadException スタック: System.Windows.Application.< .ctor>b__1(System.Object) の System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32) の MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System .Object、Int32、System.Delegate) の System.Windows.Threading.DispatcherOperation.InvokeImpl() の System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object) の System.Threading.ExecutionContext。

エラーメッセージは何が問題なのかを理解するのに実際には役立たないので、アプリケーションの起動イベントで try catch ステートメントを追加しましたが、例外は決してキャッチされません。また、ロードする必要がある最初のダイアログ ウィンドウで実行される try catch aroundInitialiseComponent()メソッドを追加しましたが、ここでも catch がキャッチされないため、エラーの原因がわかりません。

この問題が何であるかを理解し、修正するにはどうすればよいですか?

4

3 に答える 3

4
How can I figure out what this problem is and fix it.

VisualStudioリモートデバッガーを使用してリモートデバッグを実行します。

このチュートリアルでは、その使用方法について説明します。

VS Remote Debugに慣れたら、常にこの強力なツールを使用して、潜在的なクライアント環境でテストします。

特定の問題については、Application.Startupイベントハンドラーに、ファイルを読み込もうとして失敗するコードがあります。App.xamlにコードを投稿して、問題の原因を自分で見つけられない場合に分析できるようにします。

于 2011-09-16T21:47:33.777 に答える
3

Fuslogw は、Fuslogvw.exe (Assembly Binding Log Viewer)を参照して、ライブラリ バインディングのエラーを調査するのに役立ちます。

どのように Sqllite 接続を作成しますか? この投稿がDbProviderFactoryの助けになるかもしれません

于 2011-09-16T21:50:26.463 に答える
1

スタックトレースによると、OnStartupによって呼び出されたApplication_Startupで問題が発生しています。したがって、これらの例外を生成している可能性のあるコードで、これらのイベントを実装/オーバーライドまたは配線したかどうかを確認する必要があります。複数のメソッドがイベントハンドラーにサブスクライブする可能性があるため、問題がコードにあるという保証はありません。

エラーの場所を絞り込むのに役立ついくつかのログチェックポイントを作成したり、エラーのコンテキストで値をログに記録したりできます。

リモートデバッグを使用して、エラーの場所を絞り込むこともできます。

グーグルでエラーが発生したときにログを実行できるように実装する方法を学ぶことができる未処理の例外ハンドラーもいくつかありますが、通常、その時点で、正常に閉じる以外の情報を取得するのは遅すぎます。おそらくアルストディッチアプローチ。

このようなSysInternalsツールを使用して、プログラムがアクセスしようとしているファイルを特定し、障害にフィルターをかけることもできます: http ://technet.microsoft.com/en-us/sysinternals/bb896645

アクセスしようとした最後のファイルが何であるかを判別でき、OSレベルでエラーが何であるかを確認することもできます。このツールは、奇妙なファイルアクセスの問題に対処するのに役立つことがわかりました。ただし、理解するには時間がかかります。

于 2011-09-16T21:47:52.187 に答える