- PR -

WindowsアプリとWebアプリとで共通なプロジェクトを参照する場合のソリューションの構成は?

投稿者投稿内容
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2004-02-14 11:55
引用:

Ten.さんの書き込み (2004-02-14 00:04) より:

この場合は3つのソリューションが存在するということでしょうか?
共通プロジェクト用のソリューションを作り、それをWinとWebのソリューションから
参照するということかな。




すみません、こっちの質問に回答してませんでした。

そうです、この場合3つのソリューションがあります。ただし1つは共通プロジェクト(Win/Web共に参照するライブラリ部分)だけがはいったソリューションではなく、Ten.さんがやろうとしているようにWin/Web/共通全てのプロジェクトがはいったソリューションです。うちの開発ではこのようなプロジェクトは完全にビルド専用ソリューションになっています。
またWin(Web)用のソリューションは、共通部のソリューションを参照しているのではなく(そういったことは出来ないと思う)、共通部のプロジェクトを[追加]-[既存プロジェクト]で追加を行っています。

この例は概念であり実際の開発では、もうすこし複数のソリューションに分かれています。(Winでも業務グループ単位とか)

ただWebはなかなか思うようにソリューションが構成できないのが難点です。VS.NET+VSSで複数のWebプロジェクトを多人数で開発しているとソリューションの構成が崩れることがままあります。
これを直すのがまたコツがいるんですよね。。(^^;

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-14 13:08
引用:

noderaさんの書き込み (2004-02-14 11:39) より:

この構成で[デバッグ]-[開始]をやってしまうと、ソリューションに入っているプロジェクトが全てビルドされてしまいます(構成プロパティでビルド対象になっているものだけですが)。


 そうですか?「参照」している、「依存」しているものだけがビルドされていますけど?
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2004-02-14 16:06
引用:

Jittaさんの書き込み (2004-02-14 13:08) より:
 そうですか?「参照」している、「依存」しているものだけがビルドされていますけど?



おやぁ?マジっすか。
たとえば1つのソリューションに、互いに関連しない2つのWinFormプロジェクトを追加し、片方をスタートアップアプリケーションに指定して、[デバッグ]-[開始]とした場合、両方ともビルドされてしまいませんか?
そして、スタートアップじゃないほうを、わざとコンパイルエラーにするようなコードを書いておくと、[デバッグ]-[開始]では実行できないんですが。

自分の環境だけ...のはず無いと思うんだけど、隣のマシンでも同じだったよな....
WindowsXP Pro + VS.NET2003
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-14 16:47
引用:

noderaさんの書き込み (2004-02-14 16:06) より:

たとえば1つのソリューションに、互いに関連しない2つのWinFormプロジェクトを追加し、片方をスタートアップアプリケーションに指定して、[デバッグ]-[開始]とした場合、両方ともビルドされてしまいませんか?


 Winアプリは試していないですが、おそらくビルドしていませんよ。Webアプリで、1つのプロジェクトが「体験版」のコントロールを使っているのですが、ビルド時に“看板”がでます。そのプロジェクトを参照していないプロジェクトをスタートアッププロジェクトにしています。「ソリューションのビルド」をすると看板がでますが、「デバッグ→開始」では看板はでません。



 関係ないですが、編集していないプロジェクトまでビルドするのはやめて欲しい。。。「なんで依存関係でビルド日時のチェックしてねぇえんだよぉ!?」と言いたい。・・・あ、ということは、noderaさんのおっしゃるとおりビルドはしている?あれ?
Ten.
ベテラン
会議室デビュー日: 2003/04/03
投稿数: 67
投稿日時: 2004-02-16 21:31
noderaさん、Jittaさん遅くなりましたが、ご返答ありがとうございます。

引用:

そうです、この場合3つのソリューションがあります。ただし1つは共通プロジェクト(Win/Web共に参照するライブラリ部分)だけがはいったソリューションではなく、Ten.さんがやろうとしているようにWin/Web/共通全てのプロジェクトがはいったソリューションです。うちの開発ではこのようなプロジェクトは完全にビルド専用ソリューションになっています。
またWin(Web)用のソリューションは、共通部のソリューションを参照しているのではなく(そういったことは出来ないと思う)、共通部のプロジェクトを[追加]-[既存プロジェクト]で追加を行っています。


なるほど、このようなやり方もあるのですね。
複数のソリューションに分ける場合は、この方が良さそうですね。

1つのソリューションで行う場合の「関係ないプロジェクトまでビルドされる」という問題は、ソリューション構成を切り替えることで対応できないかと思っています。

デフォルトでは「Debug」という構成がありますが、これを「Win Debug」と「Web Debug」という感じで用途ごとに作り、それぞれ必要なプロジェクトだけビルドするように構成すればうまくいかないかと考えております。

ソリューション構成の設定やどの構成を選択しているかといった情報が、共通なのか個人ごとなのかによっても変わると思いますので、調べてみます。(今は環境がないのでできませんが)
Ten.
ベテラン
会議室デビュー日: 2003/04/03
投稿数: 67
投稿日時: 2004-02-17 11:16
引用:

1つのソリューションで行う場合の「関係ないプロジェクトまでビルドされる」という問題は、ソリューション構成を切り替えることで対応できないかと思っています。

デフォルトでは「Debug」という構成がありますが、これを「Win Debug」と「Web Debug」という感じで用途ごとに作り、それぞれ必要なプロジェクトだけビルドするように構成すればうまくいかないかと考えております。


上記の方法を試してみたところ、意図したとおりになりました。

ソリューション構成の設定は、以下の点よりユーザ間で共通だと判断しました。
・設定を変更したときにソリューションファイル(.sln)が更新される
・ソリューションファイル(.sln)の中身を見るとソリューション構成の設定内容と思われる情報がある

どのソリューション構成を選択しているかは、以下の点よりユーザ固有だと判断しました。
・ソリューション構成の選択だけを変更した場合にVSSの管理対象外のファイルしか更新されていない(.suo、.user、.webinfo)

実際にVSSに登録してみるのが一番かと思いますが、試せる環境がありませんので、中途半端ではありますが、ひとまずはこれでよしとします。

ちなみに、ソリューション構成でビルドの対象となっている場合は、スタートアッププロジェクトと依存関係のないプロジェクトもビルドされます。(わざとコンパイルエラーとなるコードを挿入して試しました)

ですから、Jittaさんの
引用:

 Winアプリは試していないですが、おそらくビルドしていませんよ。Webアプリで、1つのプロジェクトが「体験版」のコントロールを使っているのですが、ビルド時に“看板”がでます。そのプロジェクトを参照していないプロジェクトをスタートアッププロジェクトにしています。「ソリューションのビルド」をすると看板がでますが、「デバッグ→開始」では看板はでません。


という件は少し違う話なのかな?と思いました(「看板」のでる仕組みとかが分からないので断定はできませんが)

試したプロジェクトの構成は最初の投稿で例に挙げた以下のようなものです。

引用:

・Winプロジェクト(Windowsアプリケーション)
・Webプロジェクト(ASP.NET Webアプリケーション)
・共通プロジェクト(クラスライブラリ)

WinプロジェクトとWebプロジェクトは共通プロジェクトを参照します。
(WinプロジェクトとWebプロジェクトの間には依存関係がない)


Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-17 11:58
引用:

Ten.さんの書き込み (2004-02-17 11:16) より:

という件は少し違う話なのかな?と思いました(「看板」のでる仕組みとかが分からないので断定はできませんが)


 GrapeCityのSPREAD for .NETの体験版なのですが、ビルド時に「体験版」というスプラッシュ画面が出るのです。ビルドしたらでると思っていたのですが、違うのかな?
 PJ1からPJ2、PJ3を参照していて、PJ3でその看板がでます。大元はPJ1なのでPJ1をスタートPJにしていたのですが、看板がうっとうしいのでPJ2をスタートPJにしました。すると、看板はでなくなりました。ところが、PJ1を修正する必要があり、修正した後に「開始F5」すると・・・PJ1はビルドされていないので修正前の状態で起動しました(--;。これから、「参照していないプロジェクトはビルドされない」と判断しているのですが、違うのかなぁ???

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