- PR -

プロジェクトの参照方法について(プロジェクト参照とは)

投稿者投稿内容
タオル
常連さん
会議室デビュー日: 2005/04/27
投稿数: 43
投稿日時: 2006-01-28 14:00
お世話になります。
VS2003C#で開発しております。

タイトルどおり、プロジェクトの参照方法についてご教授くだされば幸いです。



共通DLLプロジェクト

├A画面DLLプロジェクト┬子画面Aクラス1
│             ├子画面Aクラス2
│             └子画面Aクラス3

├B画面DLLプロジェクト┬子画面Bクラス1
│             ├子画面Bクラス2
│             └子画面Bクラス3

このような構造で、開発を行っています。
共通のDLLを各画面のDLLで参照しています。
各画面の開発時の共通DLLの参照方法はDLL参照(オブジェクト参照?)です。

共通DLLは、日々更新されるような開発状況で、
毎日のようにVSSから更新された共通DLLをローカルにコピーして
動作確認を行っております。

この掲示板の過去ログを拝見していまして、
以下の方法があるんだなと分かりました。
・DLL参照
・プロジェクト参照
・リンク


現在は前述の通り、DLL参照で共通DLLを参照しているのですが、
VSSを利用してDLL本体のみだけでなく、
共通DLLのプロジェクトファイル(内部の各クラスファイルなども)参照可能な状態となっています。


そこで、以前から疑問があったのですが、
共通DLLの開発者も、その開発中のプロジェクトファイル(内部の各クラスファイルなども)は、
VSSの管理下にあるわけです。
という事は、「共通DLLプロジェクト」をビルドしてチェックインした後は、
私の開発中の「A画面DLLプロジェクト」で
「共通DLLプロジェクト」を”プロジェクト参照”しておけば、
毎日のように更新される共通DLLを
VSSからローカルにコピーするという作業は発生しなくて済むという事になりませんでしょうか?


例えば・・・
VS2003のIDEはVSS機能が組み込まれている(?)為、
@「共通DLLプロジェクト」をビルドして、最新の状態でチェックイン
A「A画面DLLプロジェクト」をVS2003で開いて即ビルド

この時、Aのビルドの際に参照されるDLLは、共通DLLの最新と考えてよろしいでしょうか?


http://sonic64.com/2003-09-07.htmlなどを拝見し、
「プロジェクト参照とは、自分をビルドする際に、プロジェクト参照しているプロジェクトを自分でリビルドしてDLLを作る」
という認識に現在至っております。問題ないでしょうか?


以上長くなってしまい、すみません。
お忙しいところ恐縮ですが何卒よろしくお願いいたします。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-01-28 15:11
引用:

私の開発中の「A画面DLLプロジェクト」で
「共通DLLプロジェクト」を”プロジェクト参照”しておけば、
毎日のように更新される共通DLLを
VSSからローカルにコピーするという作業は発生しなくて済むという事になりませんでしょうか?


VSS 云々は関係ないと思いますが、その通りです。(お試しになられたのなら、そうだとわかったのでは?)
最新の共通DLLがA画面DLLのプライベートにコピーされます。
_________________
囚人のジレンマな日々
タオル
常連さん
会議室デビュー日: 2005/04/27
投稿数: 43
投稿日時: 2006-01-28 16:55
囚人さん、
いつもお返事ありがとうございます。
とても感謝しております。

引用:
VSS 云々は関係ないと思いますが、その通りです。


「プロジェクト参照とは、自分をビルドする際に、プロジェクト参照しているプロジェクトを自分でリビルドしてDLLを作る」
という認識も間違いないという事でよろしいでしょうか?

また、
引用:
(お試しになられたのなら、そうだとわかったのでは?)


仰るとおりです。プロジェクト参照を試して、問題なく実行できているのは確認していたのですが、
職場の環境では、先ほどの質問内容の通り、VSSからローカルにコピーという作業を行う事が、
「決まり」となっているので、プロジェクト参照の方が手順が一つ少ないのに
「敢えて」DLL参照を行っているのかなぁ?との疑問があり、
まず私の認識に問題が無いかアドバイスいただきたかったというのが本音です。

また、そうであれば、
・DLL参照を使う利点というのは何かございますでしょうか?


最後に、参照の際のローカルコピーのtrue/falseについてなのですが、
ソリューションエクスプローラで、参照の追加を行うと、
参照設定ツリーに、追加したDLLが表示されるかと思います。
そのDLLのプロパティを見ると、ローカルコピーは"True"になっているかと思います。(自作のDLLの場合)
ローカルコピーの説明に、
"参照が出力ディレクトリにコピーされるかどうかを示します。"
とありますので、本プロジェクトの出力先である相対パス「bin\\Debug\\」をみたところ、
ローカルコピーが"True"になっているものは、このフォルダに存在しました。
これを"false"にしたところ、このフォルダから消えました。
この状態で、プロジェクトをビルドすると通るのですが、実行の際に、
System.IO.FileNotFoundExceptionが発生します。
参照プロパティのパスには、今回の例で言うところの「共通DLL」までのパスが表示されているのにもかかわらずです。

これは何を意味するのでしょうか?
私の認識では、プログラム実行時には、参照プロパティのパスに表示されているDLLを拾いに行くというものだったのですが、
結局、"参照が出力ディレクトリにコピーされるかどうかを示します。"にあるとおり、
該当プログラムの出力ディレクトリのDLLを参照している事になるかと思います。
ただ、System.Windows.Formsなど、デフォルトで表示されている参照は、ローカルコピー"false"ですが
出力ディレクトリにローカルコピーが無くても動きます。。

この辺のもやもやが大きくて手が止まっている状態です。
何か参考になるページなどございましたら、
ご教授願えませんでしょうか。


休日にお忙しいところ申し訳ございません。
何卒お知恵をお貸しください。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-01-28 17:12
http://www.atmarkit.co.jp/fdotnet/technology/idnfw11_index/index.html
そのものズバリです。

やや量が多いですが、読み解くと頭がすっきりしますよ。
厳密名のあるアセンブリとないアセンブリ。アセンブリのグローバル配置とプライベート配置。キーワードはこんなもんでしょうか。
_________________
囚人のジレンマな日々
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-01-28 17:54
引用:

VS2003のIDEはVSS機能が組み込まれている(?)為、
(1)「共通DLLプロジェクト」をビルドして、最新の状態でチェックイン
(2) A画面DLLプロジェクト」をVS2003で開いて即ビルド

この時、(2)のビルドの際に参照されるDLLは、共通DLLの最新と考えてよろしいでしょうか?



(1) と (2) の作業環境=作業者+作業端末が同じであればそのとおりです。

ですが、両者の作業環境が異なる場合、例えば、端末Aで担当a 作業 (1) を実行しても、これから (2) の作業を行うとしている端末Bの担当b の環境に、担当a の行ったさ業の結果が自動的に反映することはありません。

担当b は、自らの担当作業を行う前に、IDE を操作するなどして、VSS から最新のソースを取得する必要があります。

IDE を「プロジェクトを開く時に、常に最新のソースを自動的に取得する」ように設定することも出来ますが、個人的にはあまり使い心地が良いとは思いません。

自分の作業の進捗にあわせて、適宜最新のソースを VSS から取得する方が、私にはあっているようです。

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-28 19:50
引用:

タオルさんの書き込み (2006-01-28 16:55) より:

「プロジェクト参照とは、自分をビルドする際に、プロジェクト参照しているプロジェクトを自分でリビルドしてDLLを作る」
という認識も間違いないという事でよろしいでしょうか?


プロジェクト参照をするということは、依存関係ができるということですから、
ビルドする際に DLL は生成されます... というか更新日見ればわかりますよね?

引用:

職場の環境では、先ほどの質問内容の通り、VSSからローカルにコピーという作業を行う事が、
「決まり」となっているので、プロジェクト参照の方が手順が一つ少ないのに
「敢えて」DLL参照を行っているのかなぁ?


DLL の参照はその DLL が "完成" されていればそうします。
プロジェクト参照は開発途中である場合に有益です。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-28 20:12
あ、答えるべき場所を間違っているかも。

別端末であれば、ひどりさんの仰るとおり、
VSS にいくら最新があがっていても自動で取得するわけではないので、
DLL 側のプロジェクト ファイル一式を VSS (VS なら右クリックして最新の取得) で取得する必要があります。

どちらにしても最新は VSS から落とすことになるので手間はあまり変わりませんが、
プロジェクト参照の場合はソースが見えます。(見えてしまう、と言うべき場合もあります)

DLL の場合は見れませんし、開発途中であればその DLL (クラス ライブラリ) を
担当している方がわざわざ固めて VSS にあげなければならないので、手間です。

私はいつもクラス ライブラリを担当していますので、プロジェクト参照のおかげで救われています。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
lalupin4
大ベテラン
会議室デビュー日: 2004/07/26
投稿数: 163
投稿日時: 2006-01-28 20:43
引用:

「プロジェクト参照とは、自分をビルドする際に、プロジェクト参照しているプロジェクトを自分でリビルドしてDLLを作る」
という認識に現在至っております。問題ないでしょうか?


これは、問題ない、と思います。

引用:

@「共通DLLプロジェクト」をビルドして、最新の状態でチェックイン
A「A画面DLLプロジェクト」をVS2003で開いて即ビルド


 @とAの間に「最新バージョンの取得」が無いようです。

引用:

Aのビルドの際に参照されるDLLは、共通DLLの最新と考えてよろしいでしょうか?


 最後に取得したソースが生成する共通DLLと考えるべきだと思います。

引用:

私の開発中の「A画面DLLプロジェクト」で
「共通DLLプロジェクト」を”プロジェクト参照”しておけば、
毎日のように更新される共通DLLを
VSSからローカルにコピーするという作業は発生しなくて済むという事になりませんでしょうか?


 よって、ならないと思います。

スキルアップ/キャリアアップ(JOB@IT)