C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: DLL参照について


(過去ログ 122 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■73252 / inTopicNo.1)  DLL参照について
  
□投稿者/ ルーキー (1回)-(2014/09/03(Wed) 10:28:56)

分類:[C#] 

DLL参照について、簡単にご説明いただけると幸いです。

DLLプロジェクトをいくつか作成し、メインプロジェクトで参照利用しています。
DLLプロジェクトの変更途中で、中途半端にメインプロジェクトに反映されるのを避けたいため、
DLLプロジェクトのbinフォルダー内ではなく、DLL参照用フォルダーを別に作成し(仮にDLLフォルダーとします)、
そこにコンパイルされたすべてのDLLファイルとXMLファイルを配置して、参照するようにしています。

動きとしましては、狙い通り、DLLの修正が途中で入っても、DLLフォルダーに上書きコピーするまでは、
メインプロジェクトには反映されず、狙った通りの形になるのですが、
メインプロジェクトを起動(デバッグ)したまま、DLLプロジェクトをコンパイルしようとすると、
「使用中のため、できない」といったようなエラーメッセージがでて、コンパイルできません。

参照しているDLLは、DLLフォルダー内で、DLLプロジェクトのコンパイルされるフォルダーやファイルとは
関係ない場所と考えていたのですが、コピーしたDLLファイルもDLLプロジェクトとの関係を
保持しているということでしょうか?
ただ、内容は反映されるわけではなさそうなので、どういった仕組みなのかいまいち理解できておりません。

また、DLL参照をするにあたって、どのようなやり方がベターなのかも合わせて教えていただけると幸いです。



引用返信 編集キー/
■73259 / inTopicNo.2)  Re[1]: DLL参照について
□投稿者/ Azulean (339回)-(2014/09/03(Wed) 22:30:23)
クラスライブラリ、アプリケーションにはデバッグ用の情報が入っている PDB ファイルへのフルパスが記録されています。
アプリケーションをデバッグする際、その読み込んだクラスライブラリの PDB ファイルを参照しますので、デバッグ中は PDB ファイルがロックされる形になります。
これに対して、クラスライブラリをビルドする際は DLL ファイルとともに PDB ファイルへの書き込みが必要になりますが、前述のようにロックされているため、ビルドに失敗する結果を招きます。

この問題を防ぐには、デバッグ情報、つまり PDB を生成しない設定にする必要があります。(プロジェクトのプロパティ、ビルド、詳細設定、デバッグ情報を none とする)
ただし、この設定にした場合、ステップインなどのデバッグができなくなる DLL ができあがることになるので、その点をご留意ください。


個人的に、ご質問のようなケースに万能に対応するソリューションはないと思います。
ビルドパスが異なるようなマシン(ビルドマシンなど)でビルドした結果をアプリケーションに組み込むといった策、アプリケーションのデバッグ環境を別のマシンにするといった策ぐらいでしょうか。
引用返信 編集キー/
■73261 / inTopicNo.3)  Re[2]: DLL参照について
□投稿者/ ルーキー (2回)-(2014/09/04(Thu) 09:30:04)
Azulean 様

非常にわかりやすいご回答ありがとうございました。
納得いたしました。

教えていただいたPDBを生成しない方法も善し悪しあるので、
とりあえず現状は、そのままの環境にしたいと思います。

ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -