2016-06-20 1 views
1

リリースモードで起動しようとすると、アプリケーションが失敗する。デバッグモードは正常に動作します。呼び出しのターゲットが例外をスローされました:私はオブジェクトをリフレクティブに作成している間だけ、リリースモードで例外が発生する

型「System.Reflection.TargetInvocationException」の未処理の例外がPresentationFramework.dll

に追加情報を発生した読み込みエラーを取得しています。

これはリリースでのみ発生するため、デバッグするのが少し難しかったです。私はプロジェクトのプロパティで「コードの最適化」のチェックボックスのチェックを外す場合は、私はこの方法でスローされた例外を見ることができる午前:

この行の
private static T MakeObject<T>(Type type) where T :class 
    { 
     //Default reflective behavior to create an instance with an empty constructor 
     // 
     //*note: .GetConstructor can return null. 
     object obj = null; 
     T tObj = default(T); 

     ConstructorInfo ci = type.GetConstructor(TypeInfo.EmptyTypes); 

     if (ci != null) 
     { 
      obj = ci.Invoke(new object[] { /* Empty */}); 

      tObj = obj as T; 
     } 

     if (tObj == null) 
      throw new InvalidCastException("Fatal error occurred within NavigationService (GetConstructor). Type: " + type.ToString()); 

     return tObj; 
    } 

ConstructorInfo ci = type.GetConstructor(TypeInfo.EmptyTypes); 

例外が読み取ります。

「System.NullReferenceException」種類の例外がLWDCloudManager.exeで発生したが、ユーザーコードで処理されなかった

追加情報:オブジェクト参照がオブジェクトのインスタンスに設定されていません。

この問題を解決する方法や、リリースモードでのみ発生する可能性がある理由を深く理解する方法については、他にもご意見がありますか?

+1

'type'はヌルですか?もしそうなら、このコードだけではなぜそれを伝えるのも不可能です。例外が発生したときにスタックを調べ、誰がこのメソッドを呼び出したのか、呼び出し元がnullを渡した理由を確認します。 –

+1

そのエラーを解釈すると、 'type'変数が' null'であるか、 'GetConstructor'が' null'を返したことを意味します。私にとっては、前者のように見えるかもしれませんが、後者も可能性があります(https://msdn.microsoft.com/en-us/library/h93ya84h(v = vs.110).aspx) (戻り値の文書の注記を参照)。 'type'が' null'の場合、例外を投げてみることができますか? –

+0

この問題は、リリースモードでのみ発生するという問題があります。だから私は内部例外や呼び出しスタックにアクセスすることはできません。しかし、デバッグモードでチェックすると、引数 "type"はnullとして渡されません。 – KSF

答えて

2

私はこの問題を発見しました。実際に私の愚かな問題/監督のようなもの。最近私の会社では、内部メソッドで例外をスローするのではなく、Debug.Assertsを使用することにしたので、すべてを行って変更しました。この問題以前のコード行の1つは、ディクショナリ上のTryGetValue呼び出しの呼び出しをラップするデバッグアサートでした。リリースモードで実行しようとしていたため、debug.assertが実行されなかったため、値が辞書から取得されず、nullが渡されました。助けを借りてくれてありがとう

+0

ベストアイデアではないかもしれません...これでバグがあればプロダクションリリースが投げられますが、ずっと後で、まったく無関係な場所にあるため、例外が簡単に再現できない限り、デバッグが難しくなります。 「私たちの製品があまりにも多くクラッシュした場合、そのスローを取り除くことはできますか」という反応でしたか? –

関連する問題