3

.NET 用の新しい Spring CodeConfig を試していますが、問題がたくさんあります。

NuGet パッケージSpring.CodeConfigを既存の .NET 4 プロジェクトにインストールしましたが、問題はありませんでした。

次のコードを実行すると、ScanAllAssemblies メソッドが ReflectionTypeLoadException をスローします。

var context = new CodeConfigApplicationContext();
context.ScanAllAssemblies();
context.Refresh();

これは、構成クラスを定義していない場合でも発生しますが、構成クラスを作成した場合にも発生します。

LoaderExceptions プロパティには、次のメッセージを含む 1 つの例外が含まれています。

ファイルまたはアセンブリ 'System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' またはその依存関係の 1 つを読み込めませんでした。無効なポインター (HRESULT からの例外: 0x80004003 (E_POINTER))

System のバージョン 1.0.3300.0 から、私のプロジェクトで参照されているバージョン 4.0.0.0 へのアセンブリ リダイレクトを追加しようとしましたが、うまくいきません。

この問題を解決するにはどうすればよいですか?


リクエストに応じて、問題のプロジェクトからの参照を以下に示します。

  • mscorlib、バージョン = 4.0.0.0、カルチャ = ニュートラル、PublicKeyToken = b77a5c561934e089
  • Ploeh.Samples.MenuModel、バージョン = 1.0.0.0、カルチャ = ニュートラル、PublicKeyToken = null
  • Spring.Aop、バージョン = 1.3.1.40711、カルチャ = ニュートラル、PublicKeyToken = 65e474d141e25e07
  • Spring.Core、バージョン = 1.3.1.20711、文化 = ニュートラル、PublicKeyToken = 65e474d141e25e07
  • Spring.Core、バージョン = 1.3.1.40711、カルチャ = ニュートラル、PublicKeyToken = 65e474d141e25e07
  • Spring.Core.Configuration、バージョン = 1.0.0.4111、カルチャ = ニュートラル、PublicKeyToken = 65e474d141e25e07
  • システム、バージョン = 4.0.0.0、カルチャ = ニュートラル、PublicKeyToken = b77a5c561934e089
  • System.Core、バージョン = 4.0.0.0、カルチャ = ニュートラル、PublicKeyToken = b77a5c561934e089
  • System.Xml、バージョン = 4.0.0.0、カルチャ = ニュートラル、PublicKeyToken = b77a5c561934e089
  • System.Xml.Linq、バージョン = 4.0.0.0、カルチャ = ニュートラル、PublicKeyToken = b77a5c561934e089
  • xunit、バージョン = 1.7.0.1540、カルチャ = ニュートラル、PublicKeyToken = 8d05b1bb7a6fdb6c

2 番目の参照はプロジェクト参照であるため、その依存関係もリストしています。

  • mscorlib、バージョン = 4.0.0.0、カルチャ = ニュートラル、PublicKeyToken = b77a5c561934e089
  • System.Core、バージョン = 4.0.0.0、カルチャ = ニュートラル、PublicKeyToken = b77a5c561934e089

また、App.config にこれらのバインド リダイレクトがあります - 重要な場合に備えて:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Spring.Core" publicKeyToken="65e474d141e25e07" culture="neutral" />
    <bindingRedirect oldVersion="1.3.1.20711" newVersion="1.3.1.40711" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System" publicKeyToken="b77a5c561934e089" culture="neutral" />
    <bindingRedirect oldVersion="1.0.3300.0" newVersion="4.0.0.0" />
  </dependentAssembly>
</assemblyBinding>

ただし、どちらも CodeConfig の問題を修正するための試みでした。それらを削除しても役に立ちません...

4

1 に答える 1

4

調査の結果、これは4.0CLRでのReflectionOnlyLoadAPIの問題であることがわかりました。

CodeConfigアセンブリスキャンは2.0CLRで機能しますが、.NET3.5と.NET4.0の間でReflectionOnlyLoadAPIに明らかな変更がないにもかかわらず、ReflectionOnlyLoadが依存アセンブリを処理する方法(より正確には、 .NET4.0でのReflectionOnlyLoadAPIのタイプをプログラムで解決します。

Spring.NETチームは現在、CodeConfig(1.0.1)のクイックアップデートリリースに取り組んでおり、この問題に適切に対処し、.NET4.0での使用を成功させる必要があります。私たちの注意を引いてくれてありがとう!

于 2011-04-09T13:28:58.437 に答える