MSDNのドキュメントによると、
public static Assembly LoadFrom(string assemblyFile)
スローBadImageFormatException
する場合
assemblyFile is not a valid assembly.
-or-
Version 2.0 or later of the common language runtime is currently loaded
and assemblyFile was compiled with a later version.
実際には、追加のケースが1つあります。x64モードで実行されるアセンブリからx86用に構築されたアセンブリをロードすることです。「無効なアセンブリ」ステートメントに含まれている可能性がありますが、わかりません。しかし、これは例外の合理的な原因です。
わかりましたが、.NET4.5ではそうではありません。何らかの理由でさまざまなアプリケーションを読み込む.NET4.5WPFアプリがあります。これは任意のCPU用に構築されており、x64 Win 7で起動しています。.NET4.0x86用に構築された1つの実行可能ファイルでテストしており、正常に動作しました。しかし、アプリを.NET 4.0に切り替えると、Assembly.Load
メソッドでクラッシュし始めました。
だから、私の質問は、私は何かが欠けているのですか?そうでない場合、彼らはどのようにそれを行いましたか?.NET 4.5のx64プロセスからx86アセンブリをロードしますか?現時点では理解が不足しています。
アップデート
ハンス・パッサントのおかげで、私は自分の間違いを理解しました。実際には、の動作に違いAssembly.Load
はありません。Prefer 32-bit
プロジェクト設定(または.csprojファイルのPrefer32Bitタグ)のオプションに気づかなかったことが判明しました。そのため、.NET4.5のプロセスは32ビットモードで実行されました。この設定は、WPF.NET4.5プロジェクトを作成したときに当てはまりました。次に、.NET 4.0に切り替えたとき、.NET 4.0にはそのようなオプションがなかったため、非アクティブになりました。そして、.NET 4.5に切り替えたとき、それはfalseになりました。これは、互換性の目的でそうだと思います。