2012-03-06 26 views
2

この質問は、誰かが問題を解決する方法を教えてくれるとは思わないので、問題の内容の詳細です。C#でアセンブリをロードしようとしてエラーが発生しました

私は.net 4アプリケーションを作成しており、サードパーティのDLL(hasp dongle protection)を参照したいと思っています。

私は、Visual Studioを使用してリファレンスファインを作成し、コード内でDLL内に含まれるクラスを使用できます。

最初の問題は、プログラムが実行され、dllが実際に読み込まれるときに発生します。私は次のエラーを取得します。

System.BadImageFormatException:ファイルまたはアセンブリ 「hasp_net_windows.dll」またはその依存関係の1つをロードできませんでした。有効ではありません Win32アプリケーション

このweblinkは、このエラーを修正する方法を説明しています。 Coudの人は、問題が何であるか、なぜそれを取得するのかを説明してください。

このアドバイスを実行した後、メインプロジェクトのビルドをx86に設定した後、もう一方のエラーを置き換えるエラーが発生します。新しいエラーは次のとおりです。

System.IO.FileLoadException:混合モードアセンブリは、ランタイムの バージョン「V1.1.4322」に対して構築されており、追加の構成情報なし4.0 ランタイムでロードすることはできません

このweblinkにはエラーの修正方法が記載されていますが、私のプロジェクトにはapp.configがありません。誰かがその問題が何かを説明することができれば助けになるだろうか?

これ以上の情報が必要な場合はお知らせください。

+0

なぜapp.configの嫌悪感ですか? –

+0

メニュービルド、ビルド構成(わかりませんが、ここではVSはありません)、ソリューション内の各プロジェクトごとにx86モードをターゲットにする必要があります。そのDLLの制限のために、64ビットアプリケーションを作成することはできません。 – vulkanino

答えて

8

問題はアプリケーションの「ビット」です。一度選択(32ビットまたは64ビット)すべてそのプロセス内のDLL は同じである必要があります。この例外は、DLLの1つが間違った「ビット数」であることを示しています。

あるプロセス内で異なるコンパイルターゲットを持つDLLを持つことはできません。プロセスには「ビット」の親和性があります。

これはサードパーティのアンマネージDLLであれば、32ビットコンパイルされている可能性が非常に高いです。

rootプロジェクト(exeを作成するもの)のビルド出力をx86として設定すると、作成されるプロセスが決まります。それ以外の.NETプロジェクトは、単に任意のCPUにすることができ、32ビットまたは64ビットのランタイムに適合します。

残念ながら、2番目の問題では、提供されたリンクが問題を解決する方法です。プロジェクトにapp.configを持つことには何も問題はなく、あなたはなぜそれが欲しいのかを述べていません。

+0

私はdllの.net 4バージョンを手に入れることができました。 – user589195

+0

ここで、あなたは、dslp.dllの.net 4バージョンを取得しますか? – brianestey

3

アダム・ホーズワース氏の回答にもかかわらず、私はそれにでapp.configなしで可能であると付け加えたいと思います。しかし、これにはもう少し作業が必要であり、COM相互運用性を適切に理解する必要があります。それは問題の価値があるかどうかはもちろんあなた次第です;)。

は、プログラムでICLRRuntimeInfo::BindAsLegacyV2Runtimeメソッドを使用して設定できます。

これを行う方法の簡単な説明is posted in this blogpostあなたがこのアプローチを使用して二度考えさせるかもしれない、しかし彼の警告に注意してください:

このアプローチは動作しますが、私は特に以外の目的で、製品コードが直面している公共 でそれを使用することは非常に躊躇だろう 独自のアプリケーションを初期化します。これは ライブラリで動作するはずですが、それを使用すると非常に厄介な副作用があります。実行中のアプリケーションのランタイム ポリシーが非常に隠された形で変更され、 がわかりにくくなります。

+0

+1それは分かりませんでした。 –

0

アセンブリがネイティブプログラムからCOM経由で読み込まれるため、app.configファイルを使用できません。 .NET Framework 4.0をサポートするライブラリが見つかりました。 here。このシナリオでは、他のソリューションは私のために働いていませんでした。

+0

[リンクのみの回答](http://meta.stackoverflow.com/tags/link-only-answers/info)は推奨されていませんので、SOの回答は解決策の検索の終点でなければなりません。時間の経過とともに古くなる傾向がある参照の途中降機)。リンクを参考にして、ここにスタンドアロンの概要を追加することを検討してください。 – kleopatra

関連する問題