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

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

More than 3 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
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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