2016-11-14 8 views
3

アプリケーション(65個のプロジェクトのソリューション)では、参照されているすべてのアセンブリがNinjectモジュールの存在について実行時に解析されますあまりにも)。モジュールは後でNinjectカーネルにロードされ、各モジュールはカーネルのバインディングを宣言します。ReflectionOnlyモードで新しいAppDomainにアセンブリをロードするときに、メソッドに実装がありません

参照アセンブリをリフレクション専用モードで別のアセンブリにロードするローダを採用しました。 Ninjectがディレクトリからアセンブリをロードできる方法との違いは、ディレクトリにロードしないモジュールを含むアセンブリを格納できることです。まもなく、すべての参照アセンブリが読み込まれるわけではありません。

問題がloader(サシャ理容室への信用が)一つのエントリで

System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information 

LoaderExceptionsでいくつかのアセンブリをロードできないということである。ここでは

Method 'BeforeLoad' in type 'Lekis.AppBase.Core.BLLBaseCore' from assembly 'AppBaseCore, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' does not have an implementation. 

は、いくつかの「楽しい」事実です:

  • BeforeLoadは仮想で実装先ほどのローダー例外は、別のメソッドが実装されていない(そのメソッドは仮想ではありませんでした)、後で明示的に実装したときにメソッドが見つかりませんでした。 .NET 4と5のアセンブリが
  • すべてがアプリケーションで結構です読み込みに失敗している
  • 先週アセンブリAppBaseCoreためのターゲットフレームワークは、.NET 3.5と3のアセンブリは現在、組立AppBaseCoreためのターゲットフレームワークを
  • のロードに失敗しました。そうでなければ

ILSpyとILDAsmでチェックしたときにアセンブリに間違いはありません(明らかに)。

この時点で、私は本当に失われており、この問題にどう対処するのか分かりません。

何か助けていただければ幸いです。

おかげ

+1

"メソッド' BeforeLoad'は仮想で、インターフェイスメソッドの実装です。 "それは本当に*ですか? [すべての答えはこちら](http://stackoverflow.com/questions/948785/)をチェックして、何らかのバージョニング/ロード競合にぶつからないようにしてください。アセンブリが構造的に有効であるため、ILSpy/ILDAsmは問題を報告しません。 –

+0

ありがとう、@ JeroenMostert。私はそれを見てみましょう。 –

答えて

3

自分の質問に答える:

AppDomain.CurrentDomain.ReflectionOnlyGetAssemblies() 
{System.Reflection.RuntimeAssembly[15]} 
... 
[13]: {System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089} 
[14]: {System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089} 

と注目:例外がスローされた

は、私が作成された子のAppDomainにロードされたアセンブリをスタックトレースを上って行ったと記載されていますSystem.Dataアセンブリの2つのバージョン。問題のメソッドのパラメータは、System.Data.IDbTransactionです。

最初は.NET Framework 3.5を対象としたプロジェクトで参照されていました。 4.0に変更した後は、すべて正常に動作します。

愚かな問題...

関連する問題