「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>.NET開発]]

* 目次 [#g2f26036]
#contents

*概要 [#pf26e649]
Visual Studioの、「ソリューション」・「プロジェクト」の構成を検討する際のポイントについて説明する。

*ソリューション・プロジェクト [#kd77886f]
Visual Studioでは、開発するプログラムを、ソリューション・プロジェクトという単位で管理する。

-1つのプログラムは、1-複数の[[アセンブリ]](EXEやDLLファイル)から構成される場合がある。
-1つのWebサイト・Webアプリケーションも、1-複数の[[アセンブリ]]やコンテンツ ファイルから構成される。

-また、各[[アセンブリ]]をコンピュータにインストールするための~
「セットアップ プログラム」・「Webセットアップ プログラム」などがある。

**プロジェクト [#xb75eb7f]
-プロジェクトのビルドに関する構成情報を保持している。
-1つの[[アセンブリ]]を作成するには、1つの「プロジェクト」が必要になる。
-1つの基本的なプロジェクトは1つの[[アセンブリ]]を出力する(EXE、DLL)。

***プロジェクト ファイル [#q4058250]
-*.csproj(C#用)、*.vbproj(VB用)などの拡張子を持つ。
-WindowsアプリケーションのVBプロジェクトのプロパティの例
--アプリケーション
---[[アセンブリ]]名
---名前空間
---アプリケーションの種類
---アイコン
---スタートアップ フォーム
---フレームワーク
---プロパティ
---,etc.

--コンパイル
---ビルド出力パス
---詳細コンパイル オプション
---Option Explicit,Strict,Compare
---警告・エラーの表示
---,etc.

--デバッグ~
デバッグ時の動作の設定をする。
---スタートアップ
---コマンドライン引数
---,etc.

--参照~
[[アセンブリ]]やCOMコンポーネントなど、~
プロジェクトで使用するコンポーネントの参照設定を設定する。

--リソース~
プロジェクトのリソースを設定する。
---文字列
---イメージ
---アイコン
---オーディオ
---ファイル
---,etc.

--設定~
app.configのユーザ セッティング情報を設定する。
[[app.config>.NET config#e51676cd]]のユーザ セッティング情報を設定する。

--署名~
[[アセンブリ]]に厳密名などのアセンブリ署名をしたりする。

--セキュリティ、発行~
ClickOnceアプリケーションで使用する設定をする。

***分割の意味 [#te01293e]
-モジュール単位の変更
-配布単位の変更([[アセンブリ]]での配布)

**ソリューション [#l1cda98a]
-全体のビルドに関する構成情報を保持している。
-複数の[[アセンブリ]]から構成されるアプリケーションを作成できる。

-このような構成を行う場合、以下の2通りの方法がある。
--複数の[[アセンブリ]]ををプロジェクトでまとめる(バイナリ参照)。
--複数のプロジェクトをソリューションでまとめる(プロジェクト参照)。

***ソリューション ファイル [#d04f0b14]
-*.slnの拡張子を持つ。

-ソリューション のプロパティの例 
--
--

***分割の意味 [#te01293e]
-ビルド単位の変更
-配布単位の変更([[MSI>Microsoft Windows Installer]]での配布)

*参照設定の選択 [#va41ca52]
**プロジェクト参照 [#b3d81844]
-プロジェクトに対して参照設定を行う。
-ビルド順も自動的に管理され、バージョンの不一致などが起こり難く使い易い。

-参照先のプロジェクトの変更・差し替えが容易なので、~
FIXしていないモジュールに対してはプロジェクト参照を使用する。

**バイナリ参照 [#jc48661d]
-[[アセンブリ]]に対して参照設定を行う。

-参照先のバイナリの変更・差し替えが面倒なので、~
FIXしたモジュールに対してはバイナリ参照を使用する。

*分割のメリット・デメリット [#u72c852e]
一般的に小規模開発の場合は分割を少なくして、大規模開発の場合に分割を検討する。

**メリット [#f9b9996b]
**トレードオフ [#v3434196]

***メリット [#f9b9996b]
-管理が容易になる。
-開発作業の分担が可能になる。
-部品化等により差し替えが容易になる。
-修正箇所毎、ビルド範囲を絞る事ができる。

-[[アセンブリ]]や[[MSI>Microsoft Windows Installer]]での配布が容易。
-プロセス、[[アプリケーション ドメイン]]分割により、障害範囲を少なくできる。
-プロセス、[[アプリケーション ドメイン>#j894bfa4]]分割により、障害範囲を少なくできる。

**デメリット [#ucb91710]
***デメリット [#ucb91710]
-管理が煩雑になる。
-開発作業の分担ができなくなる。
-部品化等により差し替えができなくなる。
-修正箇所毎、ビルド範囲を絞る事ができなくなる。

-複数の[[アセンブリ]]や[[MSI>Microsoft Windows Installer]]を組み合わせた配布が必要になる。
-プロセス、[[アプリケーション ドメイン]]分割により、プロセス間通信が必要になる。
-プロセス、[[アプリケーション ドメイン>#j894bfa4]]分割により、プロセス間通信が必要になる。

*Webアプリケーション、Webサイト [#q0d00cd6]
**IISのアプリケーションとの関係 [#z4f3b18b]
-1つのWebアプリケーション・Webサイトは、1つのIISのアプリケーションと対応する。
-複数のWebアプリケーション・Webサイトを1つのIISのアプリケーションに纏めることはできない。

--裏ワザ的な方法だと思いますが・・・、
>マイクロソフト サポート オンライン~
チーム開発用に複数のプロジェクトからASP.NETアプリケーションを作成する方法~
http://support.microsoft.com/default.aspx?scid=kb;ja;JP307467

**[[アプリケーション ドメイン]] [#j894bfa4]
-Webアプリケーション、Webサイト毎に[[アプリケーション ドメイン]]は異なる。
-Webアプリケーション、Webサイト([[アプリケーション ドメイン]])を格納するワーカプロセス(プロセス)を選択できる。
-[[Webアプリケーション、Webサイト>#q0d00cd6]]毎に[[アプリケーション ドメイン]]は異なる。
-[[Webアプリケーション、Webサイト>#q0d00cd6]]([[アプリケーション ドメイン]])を格納するワーカプロセス(プロセス)を選択できる。

***異なる[[アプリケーション ドメイン]]に画面遷移する方法 [#z7aa9f23]
-Server.Transferは不可能。
-Response.Redirect, LinkなどのGetメソッドは可能。
-クロスページ ポストバックなどのPOSTメソッドは可能。

***異なる[[アプリケーション ドメイン]]と情報共有する方法 [#a328cfc2]
以下の状態管理技術は、異なる[[アプリケーション ドメイン]]と情報共有できない。

-Applicationオブジェクト
-静的変数
-Cacheオブジェクト
-Sessionオブジェクト

-その他
--[[ViewState>ASP.NET ViewState]]は同一WebForm画面内でのみ有用。
--HttpContextは、Server.Transfer画面遷移の間で有用

以下の状態管理技術は、異なる[[アプリケーション ドメイン]]と情報共有できる。
-QueryString
-Cookie
-Hidden
-ASP.NETのForms認証のCookie認証チケット~
ASP.NET2.0から認証チケットを複数のサイト間で共有する仕組みが用意され、複数のサイト間で利用できるようになった。
-Cookie認証チケット~
ASP.NET2.0からASP.NETのForms認証の認証チケットを
--複数のサイト間で共有する仕組みが用意され、
--複数のサイト間で利用できるようになった。

各状態管理技術については、[[コチラ>ASP.NETの状態管理方式]]を参照。

**配置方法 [#p356278f]
*Webアプリケーション、Webサイト [#q0d00cd6]

**関係 [#z4f3b18b]

***1Webアプリ・サイト ≒ 1IISアプリ [#u4ded51b]
-1つのWebアプリケーション・Webサイトは、1つのIISのアプリケーションと対応する。
-複数のWebアプリケーション・Webサイトを1つのIISのアプリケーションに纏めることはできない。

***複数プロジェクトから1Webアプリ・サイトを構成する方法 [#m1a3c401]
1つのWebアプリケーション・Webサイトを複数プロジェクトにまとめる方法

裏ワザ的な方法だと思いますが・・・、

-マイクロソフト サポート オンライン~
チーム開発用に複数のプロジェクトからASP.NETアプリケーションを作成する方法~
http://support.microsoft.com/default.aspx?scid=kb;ja;JP307467

***[[Webアプリ・サイト間でSessionCookie、Cookie認証Ticketを共有する方法>ASP.NET#ub20f19f]] [#w14393a9]
上記のようにサイトを纏めなくても、SessionCookie、Cookie認証Ticketが共有できれば。

**配置 [#p356278f]
Webサイトを本番環境に配置する方法には、
-ファイル・フォルダのコピー
-[[プリコンパイル]]後のファイル・フォルダのコピー
-セットアップ プログラムによるインストール

などがある。

***ファイル・フォルダのコピー [#y29a0d5c]
-アセンブリが生成されていない状態でアプリケーションを配布した際の初期要求時にJITコンパイルが実行される。
-JITコンパイルによりアセンブリが生成され、その後にアプリケーションが実行される。
-JITコンパイルにより生成されたアセンブリは、「%windir%\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files」で確認できる。

***[[プリコンパイル]]後のファイル・フォルダのコピー [#vab5ed60]
-事前コンパイルによりアセンブリを生成しておくことで初期要求時のJITコンパイルを不要にできる。
-この場合、Webサイトのファイル システム上にアセンブリが生成される。
-[[プリコンパイル]]により生成されたアセンブリは、生成されたWebサイトのフォルダの直下にある「bin」フォルダで確認できる。

***セットアップ プログラムによるインストール [#efdf7fab]
Webセットアップ プログラムによるWebサイトのインストールが可能。

***[[ASP.NETの配置(Web Deploy・Web Deployパッケージ)]] [#f8b3dccc]

**変換 [#ib21f290]
なお、以下の手順で、Web サイト プロジェクトから Web アプリケーション プロジェクトへの変換が可能。

-チュートリアル : Visual Studio のWeb サイト プロジェクトから Web アプリケーション プロジェクトへの変換~
https://msdn.microsoft.com/ja-jp/library/aa983476.aspx

-bear.mini  [VS2005] Web サイト プロジェクトを Web アプリケーション プロジェクトに変換する方法~
http://bearmini.net/blog/View.aspx?bid=1&aid=65

**参考 [#aaf7dd59]

-[[ASP.NETの構成(Webサイト・Webアプリ)]]

-Web アプリケーション プロジェクトと Web サイト プロジェクト~
http://msdn.microsoft.com/ja-jp/library/dd547590.aspx

-Visual Studio 2005でWebアプリケーション・プロジェクトを使うには?[VS 2005のみ] - @IT~
http://www.atmarkit.co.jp/fdotnet/dotnettips/586webappproject/webappproject.html

----
Tags: [[:.NET開発]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS