2011-10-27 29 views
1

次のファイルを持つ.NET 4.0 32ビット(x86)デスクトップアプリケーションがあります。その1つは、書かれたラッパーライブラリから呼び出された従来のアンマネージライブラリです管理されたC + +で。ReflectionTypeLoadException .Net 4.0アセンブリから.Net 4.0アプリケーション(2.0は動作中)

  1. Application.exe(C位、.NET 4)
  2. Library.dll(C位、.NET 4)
  3. UnmanagedWrapper.dll(マネージC++)
  4. 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)しかインストールされていないマシンは例外が表示されます。何が私に言っているのでしょうか?

答えて

1

Visual Studioがインストールされている場所でアプリケーションが動作しない場合は、Visual Studio Runtimeをインストールする必要があることがあります。 Microsoft Visual C++ 2008 Redistributable Package (x86)またはMicrosoft Visual C++ 2010 Redistributable Package (x86)のいずれかをインストールしてください。動作する場合は、展開戦略の一部を確認してください。

+0

良い手がかり。アプリケーションにVS2008 C++ランタイムが含まれていても、2010ランタイムは含まれていない可能性があります。 devマシンでは両方ともインストールされていると思われますが、違いを説明します。私は迅速なチェックを持っています... –

+0

それはうまくいきましたか? – luqi

+0

それは私が思っていたよりも怪しいです、またはredistsがいかに働くか完全に理解しません。それが失敗したマシンでは、2005年より新しい(windowsディレクトリの下に)redistはありません。作業バージョンは2008年に構築されたので、なぜ始動するのか理解できません。とにかく、これは明らかに私が必要としたヒントなので、これを答えとしてマークします。ありがとう。 –

関連する問題