次のファイルを持つ.NET 4.0 32ビット(x86)デスクトップアプリケーションがあります。その1つは、書かれたラッパーライブラリから呼び出された従来のアンマネージライブラリです管理されたC + +で。ReflectionTypeLoadException .Net 4.0アセンブリから.Net 4.0アプリケーション(2.0は動作中)
- Application.exe(C位、.NET 4)
- Library.dll(C位、.NET 4)
- UnmanagedWrapper.dll(マネージC++)
- Unmanaged.dll(C)
ファイル1とファイル2は、VS 2010ソリューションによって構築されています。
Version : v4.0.30319
CLR Header: 2.5
PE : PE32
CorFlags : 3
ILONLY : 1
32BIT : 1
Signed : 0
管理対象外のラッパー・ライブラリーが、もともとこのように、VS 2008で構築された:それは問題なく働いていた、この構成では
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 16
ILONLY : 0
32BIT : 0
Signed : 0
これらについてcorflagsは、次のように見えます。私は内部の特定のインターフェイスを実装するタイプを見つけるためにAssembly.GetExecutingAssembly().GetTypes()
を使用Library.dll内のコードのセクションでは
Version : v4.0.30319
CLR Header: 2.5
PE : PE32
CorFlags : 16
ILONLY : 0
32BIT : 0
Signed : 0
:それから私は、デフォルトではターゲットとして、.NET 4を与えるVS 2010年に建設される管理対象外のラッパープロジェクトを移行しました図書館。ライブラリはアンマネージラッパーを参照するため、この時点でロードされます。 これをいくつかのマシン(すべてのWin 7 Pro x64マシン)で実行します。 いくつかのマシンでは、ReflectionTypeLoadException
が投げられ、UnmanagedWrapper.dllまたはその依存関係の1つがロードできないという不具合が発生します。
これは他のマシンでも機能します。ラッパーlibが2.0か4.0かに関係なく、ラッパーが2.0の場合にのみ動作するマシンと、ラッパーが2.0の場合にのみ動作するマシンの違いは何ですか?私が今までに持っている唯一の手掛かりは、VS 2010がインストールされているマシンは のように見えますが、.NET(4.0.30319)しかインストールされていないマシンは例外が表示されます。何が私に言っているのでしょうか?
良い手がかり。アプリケーションにVS2008 C++ランタイムが含まれていても、2010ランタイムは含まれていない可能性があります。 devマシンでは両方ともインストールされていると思われますが、違いを説明します。私は迅速なチェックを持っています... –
それはうまくいきましたか? – luqi
それは私が思っていたよりも怪しいです、またはredistsがいかに働くか完全に理解しません。それが失敗したマシンでは、2005年より新しい(windowsディレクトリの下に)redistはありません。作業バージョンは2008年に構築されたので、なぜ始動するのか理解できません。とにかく、これは明らかに私が必要としたヒントなので、これを答えとしてマークします。ありがとう。 –