2011-01-31 5 views
4

同様の質問が尋ねられましたOrdering of reflection requests in dotnet しかし、私は別の答えを期待しています...私はプラグインを使ってエントリポイントを見つけるためにリフレクションを使用するプログラム用のプラグインを作成しています。残念ながら、このプロセス中にインタフェース宣言が発生すると、処理されない例外が発生してクラッシュします。私は開発チームと話しましたが、これは修正されることはありません。これは明白な理由のために私にとって非常に限定的です。私がすでに考えている解決策の1つは、アセンブリにインターフェイスを含む別のアセンブリをロードさせることですが、これには入りませんので、大きな解決策ではありません。この問題が発生するまでにはしばらくしていました。何らかの理由で、エントリクラスが常にリフレクション列挙の順序で自分のインターフェイスに先行していたからです。.netでアセンブリを注文するC#

私の質問は、アセンブリ内のクラスとインターフェイスの順序に影響する方法はありますか?

注:私はすでに自分のインタフェースに異なるアクセシビリティレベルを設定しようとしましたが、それは私のためには機能しません。 乾杯、 J

+8

"私は開発チームと話しましたが、これは修正されないでしょう" - なぜですか?それは私に固定する必要があるような音!それを修正するように教えてください!これを修正しなければ、原因ではなく症状を治療しています。 –

+1

あなたはフレームワークのバグだと確信していますか? 'Type'のメンバにアクセスしていますが、これはインターフェイスには適用されませんか?私は自分のプラグインシステム用の同様のアセンブリウォーキングコードを書いていますが、そのような問題は発生していません。 –

+0

@Bradley彼は明らかにアセンブリウォーキングコードを所有していません...そのため、彼は回避策を探しています。 –

答えて

2

私はAppDomain.GetAssemblies()を使用してコードを検査してから検査します。 AppDomain.GetAssemblies()の実装は外部メソッドにつながります。したがって、Reflectorはほとんどここで助けになりません。で

  1. ロード順
  2. アルファベット順

しかし、実際にそれをしようとし、その結果を検査せずに、結果内のアセンブリの順序付けのために2つの論理的なオプションがありますまず、アセンブリ間の参照とロード順序を編成して、外部コードがエントリポイントクラスで適切なアセンブリを見つけて停止するようにする必要があります。後者の場合、アセンブリを「正しい」方法で命名することは純粋な問題ですが、私はそれがこの場合に当てはまるとは思っていません。

(但し、順序は同様に、例えば、「大部分」ランダム上記の二つとは全く異なっていてもよい。)

いずれの場合にも、私は遅かれ​​早かれバギーコードが問題のアセンブリに遭遇すると思いますとにかくクラッシュします。したがって、強くお勧めします:は、バグ修正を主張しています。

+0

+1、特に「バグを修正したことを主張している」というビットについては ! –

+0

これはおかげさまですが、これはアセンブリの順序ではなく、アセンブリに影響を与える必要のあるクラス/インタフェースの順序です。時には(そして私は理由を知らないのですが)コンパイラが私のインターフェイスの前にMainクラスを置くことがあります。時にはインターフェイスが最初に来ます... –

関連する問題