を結ぶ可能性の重複:
Loading x86 or x64 assembly.NET AnyCPUプロジェクトは、プラットフォーム固有のライブラリに
私は、任意のCPU .NETプロジェクトをコンパイルしようとしているが、私は持っているのSQLiteライブラリをリンクする必要がありますx86およびx64プラットフォーム用の異なるバージョン。 DLLのバージョンをx64に変更するだけでアプリケーションが起動しない、x64リファレンスを使用してコードを再コンパイルする必要があります。 x86とx64の両方の参照を追加すると、競合のためにコンパイルが失敗します。 私が使用しているシステムCOMライブラリの1つがWOW64で動作しないため、x86を使用してアプリケーションをコンパイルできません。
All 32-bit VSS applications (requesters, providers, and writers) must run as native 32-bit or 64-bit applications. Running them under WOW64 is not supported
ので、私は、任意のCPUのプロジェクトをビルドする必要がありますが、現時点で私が見るこの問題の唯一の解決策は、x86とx64の重複のプロジェクトを持っています。もっと良いものはありますか?
UPDATE
私は、プロジェクトでのx64ライブラリを参照するが、私は次の例外を取得したx86ライブラリをロードしようとします。
The located assembly's manifest definition does not match the assembly reference.
ありがとうございました。私はそのような投稿を見てきましたが、問題はDLLを変更するだけではあまり役に立ちません。 64ビットDLLを自分のフォルダにコピーしてもまだ動作しませんが、64ビットライブラリを参照するアプリケーションを再コンパイルする必要があります。私は何か間違っているのですか?また、どのバージョンを参照すればよいのか分かりません。 – axe
はい。ネイティブライブラリは同じ名前である必要がありますが、別のフォルダ(アプリのサブフォルダなど)に配置する必要があります。実行時に、 'SetDllDirectory'を呼び出して、OSがビット数に応じて正しいフォルダを探すようにします。または、 'AppDomain.CurrentDomain.AssemblyResolve'イベントを[Roverの提案](http://stackoverflow.com/questions/3787428/loading-x86-or-x64-assembly#comment7029800_6060754)として使用してください。これらのライブラリを直接参照することはありません。SQLiteの管理対象ラッパーはそうです。あなたのコードは、ラッパーが基礎となるネイティブライブラリの正しいバージョンをロードするようにします。 – GSerg
私はもう一度それを試しました、それは私のために動作しません。開始時にアプリケーションがクラッシュします。問題は私がプロジェクトでx64ライブラリを参照していることですが、私は実行時にx86ライブラリを選択します。私がx86ライブラリを使ってアプリケーションをビルドすると、それはx86ウィンドウで完全に動作します。そうでなければ、そうではありません。 – axe