2017-08-08 9 views
0

ハードウェアと通信するベンダー提供のDLLに依存するアプリケーション(C#winforms)を開発しています。私は、.NET 4(またはそれ以上のもの)のターゲットフレームワークを選択した場合、参照DLLにメソッドを呼び出そうとしたとき、私は次のメッセージを取得.NETターゲットフレームワークはサードパーティのDLLの読み込みにどのように影響しますか?

DllNotFoundException:DLL「somelibraryを読み込むことができません.dll ':メモリの場所へのアクセスが無効です。 (HRESULTからの例外:0x800703E6)

.NET 2.0または3.0のターゲットフレームワークを選択した場合、エラーは発生しません。

互換性がないか、ライブラリが.NET 3.0より古いと思われます。

.DLLがアプリケーションとシリアルポートの間の通信ハンドラとして機能する実行可能ファイルを起動する可能性があります。私は様々な互換モードを使用し、管理者として成功することなく実行するようにアプリケーションを設定しようとしました。

このエラーを回避し、4.5以降のような最新の.NETプラットフォームをターゲットにするにはどうすればよいですか? (または、かなり古いDLLを使用しているために必死になってしまっていますか?)

アプリケーションプラットフォームターゲットはx86で、デフォルト設定ではUACを使用してWin7 x64で開発しています。

+0

ロードしようとしている.NETアセンブリですか? 'ildasm.exe'で開こうとしましたか? 'fuslogwv.exe'が提供する追加情報はありますか? – ironstone13

+0

@ ironstone13あなたが提案したツールを使ってさらに調査します。私は組立の種類がわからない。 – JYelton

答えて

1

これは100%正しい解決策だとは言えませんが、ここでは考えていますが、私は妥当だと信じています。

このエラーは、通常、依存関係がない場合に発生します。 somelibrary.dllのあなたの場合の依存関係。 FW2.0では、ほとんどのファイルはProgram files (x86)\Reference Assemblies...に格納されていました。私たちは、FW4 +でいくつかのものが変更され、いくつかのクラスが移動され、アセンブリはもはやProgram Filesになく、Nuget経由でダウンロードされたことを知っています。あなたがFW4.0 +をターゲットにしたときに、あなたのアプリがv4.0の依存関係を探すようになります。私は無料のdotPeekのようないくつかの逆アセンブラを使用して、問題のDLLの内部にある参照を調べます。そして、私はマシン上でこれらを見つけようとし、名前空間に関連するバージョンの競合がないかどうかを確認します。

+0

回答/提案をありがとう。私はdotPeekに精通していないので、調査し、それが何らかの洞察を提供しているかどうかを調べる。 – JYelton

+0

@JYelton Google JetBrainsのdotPeek。 JetBrainsは、 'resharper'のような.netのための一連の重要なツールを持っている評判の良い会社です。それをダウンロードしてインストールし、そのプログラムを使用してDLLを開きます。あるいは、 'NDepend'のようなものを使うこともできます。確かに、それを行う多くのツールがあります。しかし、dotPeekはリフレクターでもあります。あなたはコードを内部で見ることができます。あなたが持っているDLLが難読化されていない限り。その後、dotPeekはほとんど役に立ちません。しかし、依存関係の視聴者が難読化されたDLLで参照を参照できるかどうかはわかりません –

関連する問題