Help us understand the problem. What is going on with this article?

VCでビルドしたDLLがロードできなくて4時間ハマった

More than 5 years have passed since last update.

VC(C++/CLI)でビルドしたDLLがC#からロードできず4時間もハマった事案が発生したので、解決策を書き留めておく。

事象
開発環境がインストールされていない環境でのみ発生する。
該当のDLLに含まれるクラスのインスタンスを生成するところで"アセンブリまたはファイルが見つからない" (FileIOException)が発生する。
DLLはexeと同じ場所に置かれている。
DLLの内容はネイティブコード(C++, 非CLI)で書かれたロジックのラッパークラス。
アプリ(exe)はC#。

原因
VCのビルド設定がDebugプロファイルになっていた。

詳細
アプリ構成としてはネイティブC++のラッパークラス(DLL)を内部で使用するライブラリ(マネージド/C#)をアプリ(C#)から呼び出すというもの。

当初Visual Studioのインストールされた開発マシンで動作を確認、うまく動いてそうなので、Windowsタブレットでの動作を確認するためにリモートデバッガを使って動作させたところDLLが読み込めず例外を吐いて終了…

いろいろ調べたところDLLファイルが見つからないわけではなく、アセンブリのシグネチャが違うか、DLL内部で参照しているアセンブリが見つからないことが原因と思われる。

frameworkバージョンの違い影響など色々と調べて試行錯誤の末、VC側でDLLのみRelease版でビルドしたとろあっさり動作した。

デバッグのため、DLL、ライブラリ、アプリともにDebugプロファイルとしていて、C#で書いたライブラリとアプリ本体はDebugのままで問題なく動作していたのでハマってしまった。

なお、原因からすると当然だが、リモートデバッガの有無には関係なく複数のPC、OSバージョンで同じ現象が発生した。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away