2017-07-20 5 views
2

私はサードパーティ製のdllを使用して、いくつかの関数呼び出しを行います。 この関数呼び出しが失敗することがあります。だから私はオブジェクトを再初期化し、再び関数呼び出しを行います。しかし、それでも失敗します。コードの実行を停止して再起動すると、関数呼び出しが正常に動作します。

私は、このサードパーティ製のdllで逆コンパイラを使用し、内部的にはdllのクラスでは、この例外の原因となる静的オブジェクトがあることに気付きました。プログラムを再起動すると、静的オブジェクトを再初期化してからコードが機能します。コードを使ってこれを強制することは可能でしょうか?基本的には、オブジェクトを作成するときにdll内部のクラス内の静的オブジェクトが再初期化されるようにしたいと思います。私は本番環境で.NETプログラムを再起動できません。私の.NETコードでエラーを引き起こすサードパーティのdllの静的なプライベートオブジェクト

+0

よりなしであることを願っていますあなたが正確にdllをどのように使用するのかは明らかではないので、情報を伝えるのは難しいです。また、それは何dllですか?ネイティブのものかNETのDLLですか? – Mono

答えて

5

使用すると、それを行うにはRefectionライブラリを使用することができます。

var prop = s.GetType().GetField("ThePrivateStaticObjectName", 
      System.Reflection.BindingFlags.NonPublic 
     | System.Reflection.BindingFlags.Instance); 
    prop.SetValue(s, "new value"); 

と一般的な方法を任意のオブジェクトのためにそれを行うには:

public static void SetPrivatePropertyValue<T>(T obj, string propertyName, object newValue) 
{ 
    // add a check here that the object obj and propertyName string are not null 
    foreach (FieldInfo fi in obj.GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic)) 
    { 
     if (fi.Name.ToLower().Contains(propertyName.ToLower())) 
     { 
      fi.SetValue(obj, newValue); 
      break; 
     } 
    } 
} 

は私が参考に:)

+0

はい、反射は働いていましたが、私は簡単に内部的に内部的に定義されたいくつかのメンバーがありました。私はReflectionを利用することができました..ご回答いただきありがとうございました.. –

+0

あなたの歓迎:) –

関連する問題