2013-02-08 7 views
6

私は、Windows 8 64ビットマシン上で複数の既存のライブラリを使用してWebアプリケーションを作成しています。 1つのネイティブDLLを参照する2つのC#DLLを使用したいと思います。どちらのC#DLLも64ビット用にコンパイルされ、テストアプリケーションでテストされます。 2つのC#DLLをプロジェクトへの参照として、ネイティブDLLをWebアプリケーションのbinフォルダに手動で追加しました。私がソリューションを構築して実行するたびに、タイトルに例外が表示されます。 これは、32ビットおよび64ビットコードが1つのプロセスで実行されることに関する問題の兆候であることがわかりました。したがって、私はすべての異なるビルド構成を試しましたが、結果は決して変わりませんでした。BadImageFormatException:ファイルまたはアセンブリを読み込めませんでした。フォーマットが正しくありません - Webアプリケーションでのみ

私は、Webアプリケーションで試しているものとまったく同じようにコンソールアプリケーションを作成しましたが、完璧に機能しました。 しかし、まったく同じ設定のWebアプリケーションでは例外がスローされます。これが私には本当に混乱しています。

私がこれまで試したどのような:

  • どれCPUを持つすべてのDLLを構築する「32ビットアプリケーションを有効」に設定

    • 変更アプリケーションプールを、64 - またはx86ターゲット
    • は、すべてのcorflagsをチェックDLL

    この設定を実行するのを手伝ってくれるすべての人にプロジェクトのエクスポートを提供できます!

    本当にありがとうございます。

  • +0

    まだ解決策はありますか?私たちも同じ問題を経験しているので、私たちはこれまでの解決策を見いだせませんでした。 –

    +0

    こんにちは、私の遅い答えに申し訳ありません。私のプロジェクトはWebアプリケーションだったので、REST経由でネイティブdllの機能を利用できるようにするWebサービスとして、第2のWebアプリケーションを作成することにしました。私はこの問題に対する他の解決策を見いださなかった。 – JZet

    答えて

    0

    ターゲットプラットフォーム(プロジェクトプロパティでビルドオプション)を設定しようとしましたか? また、この記事をご覧ください: http://www.codeproject.com/Articles/383138/BadImageFormatException-x86-i-x64

    +1

    こんにちはErkan、はい私は可能なすべてのターゲットPlattformの設定を試しました。あなたがリンクしている記事は、悲しいことに、実際にはCorflagsがアンマネージドDLLで動作しないため、役立たない:/ – JZet

    0

    私のアプリケーションで同じ問題がありました。以下を実行した後で修正されました。

    *私のWebサイトフォルダ内の「匿名」ユーザーに許可を与えます。
    *アプリケーションプールを「.NET v4.5 Classic」から「.NET v4.5」に変更する。

    0

    私が提供できるものは、何がロードされていないかを判断するのに役立つものです。それがdevサーバの場合は、Fusion Log Viewerを使用するために適切なsdkをインストールする価値があります。それができない場合は、次のようにレジストリからアセンブリバインディングログをオンにすることができます:

    Windows Registry Editor Version 5.00 
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion] 
    "LogFailures"=dword:00000001 
    "LogPath"="c:\\bindFailureLogs\\" 
    

    はちょうどあなたが完了したら、それをオフにしてください、アセンブリバインドのログを使用してパフォーマンスペナルティがあります。レジストリキーを入力する前に、フォルダが存在することを確認し、アプリケーションのアプリケーションプールをリサイクルしてログを開始してください。これは、dll(またはそれが依存関係であるか、エラーメッセージにリストされているdllであるかどうかは必ずしも明らかではないので)のdll(または依存関係)の詳細なリストを提供します。

    問題を修正したアプリケーションをパーティション化すると、異なるバージョンを対象とするアセンブリに複数の依存関係が存在することがわかります。また、アセンブリの単一バージョンのみをアプリケーションドメインに読み込むことができます。マネージドアセンブリの場合はassembly binding redirectを使用できますが、それが存在する場合でも管理対象でない同等のものは何か分かりません。

    関連する問題