1

EntityFrameworkの操作に問題があります。以下のコードの平和は私のPCで正常に機能しますが、VPSに転送されると(すべてが適切にプリインストールされている)、未処理の例外が発生します:System.NullReferenceException:オブジェクト参照はオブジェクトのインスタンスに設定されていませんが、メッセージボックスこれをキャッチすることになっているものは表示されません。助言がありますか?

前もって感謝します。

        var cc = new CopierContext();
        try
        {
            MessageBox.Show(cc.Database.Connection.ConnectionString.ToString());

            var matchingProviders2 = cc.Providers.Where(prov => prov.Login == "batman");
        }
        catch (Exception e)
        {
            MessageBox.Show(e.InnerException.Message);
        }

アップデート:

私はついに問題の核心にたどり着きました。理由は次のとおりです。アプリケーションは.NET4.5を使用して開発されましたが、VPSで.NET4を使用しました。後者をインストールすると、すべての問題が解消されました。よろしくお願いします。

4

4 に答える 4

1

VPSでどのように実行しているかわかりませんが、インタラクティブユーザーアカウントで起動されていない場合、メッセージボックスは表示されません。

于 2012-11-28T16:20:01.737 に答える
1

Exception.InnerExceptionプロパティのドキュメントから

InnerException プロパティは、コンストラクターに渡されたものと同じ値、またはnull 参照を返します。

古い例外をキャッチcatch (Exception e)しているため、スローされている例外が予想していた例外ではなく、InnerException を持たない可能性は十分にあります。これは、catch ブロックが例外を発生させている可能性があることを意味します。

実行できるアクションはいくつかあります。

  1. トップレベルの例外ハンドラー以外で System.Exception 例外をキャッチしないでください。何をすべきかわかっている例外のみをキャッチします。それは...
  2. トップレベルの例外ハンドラを設定する
  3. 最後に、例外メッセージを記録または表示するときは、少なくとも内部例外があることを確認してから、使用してみてください。

    MessageBox.Show( (e.InnerException != null ? e.InnerException : e).Message );

于 2012-11-28T22:45:43.147 に答える
0

私の賭けは、あなたが何かを構成していない (または正しく構成していない) ため、cc.Database.Connection.ConnectionStringnull であるということです。を呼び出す.ToString()と、NullReferenceException が発生します。そのため、メッセージ ボックスは表示されません。他の人が言ったように、この種のデバッグに MessageBox を使用することはお勧めできません。キャッチでは、メッセージではなく e.ToString() を出力する必要があります。問題のある場所を指すスタック トレースが表示されます。

于 2012-11-28T21:18:54.533 に答える
0

MessageBox はサービスであるため使用しないでください。代わりにそれらをディスクに記録して、それらを思い出せるようにするか、発生した問題の最新情報を入手できるように自動的にメールで送信してください。

e.InnerException.StackTraceまた、ログに追加する必要があります。

于 2012-11-28T16:17:37.163 に答える