配置が必要なファイルを決定する (C#)

作成者: Scott Mitchell

PDF のダウンロード

開発環境から運用環境に配置する必要があるファイルは、ASP.NET アプリケーションが Web サイト モデルと Web アプリケーション モデルのどちらを使用してビルドされたかによって異なります。ただし、その違いは部分的です。 これら 2 つのプロジェクト モデルの詳細と、プロジェクト モデルが配置にどのように影響するかについて説明します。

はじめに

ASP.NET Web アプリケーションを配置するには、開発環境から運用環境へ ASP.NET に関連するファイルをコピーする必要があります。 ASP.NET 関連のファイルには、ASP.NET Web ページのマークアップとコード、およびクライアント側とサーバー側のサポート ファイルが含まれます。 クライアント側のサポート ファイルとは、Web ページによって参照され、ブラウザーに直接送信されるファイル (画像、CSS ファイル、JavaScript ファイルなど) です。 サーバー側のサポート ファイルには、サーバー側で要求を処理するために使われるものが含まれます。 これには、構成ファイル、Web サービス、クラス ファイル、型指定されたデータセット、LINQ to SQL ファイルなどが含まれます。

一般に、すべてのクライアント側サポート ファイルを開発環境から運用環境にコピーする必要がありますが、コピーされるサーバー側のサポート ファイルは、ユーザーがサーバー側コードをアセンブリ (.dll ファイル) に明示的にコンパイルするか、これらのアセンブリを自動生成するかによって異なります。 このチュートリアルでは、コードをアセンブリとして明示的にコンパイルする場合と、このコンパイル ステップを自動的に実行する場合で、配置する必要があるファイルについて説明します。

明示的なコンパイルと自動コンパイル

ASP.NET Web ページは、宣言型マークアップとソース コードに分かれています。 宣言型マークアップ部分には、HTML、Web コントロール、データ バインド構文が含まれます。コード部分には、Visual Basic または C# コードで記述されたイベント ハンドラーが含まれます。 マークアップ部分とコード部分は通常、別々のファイルに分かれます。WebPage.aspx には宣言型マークアップが含まれているのに対し、WebPage.aspx.cs はコードを格納します。

Text プロパティがページの読み込み時に現在の日時に設定される Label コントロールを含む、Clock.aspx という名前の ASP.NET ページについて考えます。 宣言型マークアップ部分 (Clock.aspx) には Label Web コントロールのマークアップ (<asp:Label runat="server" id="TimeLabel" />) が含まれる一方、コード部分 (Clock.aspx.cs) には次のコードを含む Page_Load イベント ハンドラーがあります。

protected void Page_Load(object sender, EventArgs e)
{
    TimeLabel.Text =  "The time at the beep is: " + DateTime.Now.ToString();
}

ASP.NET エンジンがこのページの要求を処理するには、まずページのコード部分 (WebPage.aspx.cs ファイル) をコンパイルする必要があります。 このコンパイルは、明示的または自動的に行うことができます。

コンパイルを明示的に行う場合、アプリケーションのソース コード全体が、アプリケーションの Bin ディレクトリにある 1 つ以上のアセンブリ (.dll ファイル) にコンパイルされます。 コンパイルを自動的に行う場合、結果の自動生成されたアセンブリは、既定では、%WINDOWS%\Microsoft.NET\Framework\<バージョン> にある Temporary ASP.NET Files フォルダーに配置されますが、この場所は Web.config<compilation> 要素を使って構成できます。 明示的なコンパイルでは、ASP.NET アプリケーションのコードをアセンブリにコンパイルするために何らかのアクションを実行する必要があります。この手順は、配置前に行われます。 自動コンパイルでは、リソースが最初にアクセスされるときに、Web サーバーでコンパイル プロセスが実行されます。

使用するコンパイル モデルに関係なく、すべての ASP.NET ページのマークアップ部分 (WebPage.aspx ファイル) を運用環境にコピーする必要があります。 明示的なコンパイルでは、Bin フォルダー内のアセンブリをコピーする必要がありますが、ASP.NET ページのコード部分 (WebPage.aspx.cs ファイル) をコピーする必要はありません。 自動コンパイルでは、コードが存在し、ページにアクセスしたときに自動的にコンパイルできるように、コード部分のファイルをコピーする必要があります。 各 ASP.NET Web ページのマークアップ部分には、ページに関連付けられているコードが既に明示的にコンパイルされているかどうか、または自動的にコンパイルする必要があるかどうかを示す属性を持つ @Page ディレクティブが含まれています。 その結果、運用環境はどちらのコンパイル モデルもシームレスに操作できるため、明示的または自動コンパイルが使用されることを示すために特別な構成設定を適用する必要はありません。

表 1 は、明示的なコンパイルと自動コンパイルを使用する場合に配置するさまざまなファイルをまとめたものです。 使用するコンパイル モデルに関係なく、Bin フォルダーが存在する場合は、常にアセンブリをそのフォルダーに配置する必要があることに注意してください。 Bin フォルダーには、明示的なコンパイル モデルを使用する場合にコンパイルされたソース コードを含む、Web アプリケーションに固有のアセンブリが含まれています。 Bin ディレクトリには、他のプロジェクトのアセンブリや、ユーザーが使用する可能性があるオープンソースまたはサードパーティ製のアセンブリも含まれており、これらは運用サーバー上に配置する必要があります。 そのため、一般的な経験則としては、配置時に運用環境まで Bin フォルダーをコピーします。 (自動コンパイル モデルを使用していて、外部アセンブリを使用していない場合は、Bin ディレクトリはありませんが、問題ありません)

コンパイル モデル マークアップ部分ファイルを配置するか? ソース コード ファイルを配置するか? Bin ディレクトリにアセンブリを配置するか?
明示的なコンパイル はい いいえ はい
自動コンパイル はい はい はい (存在する場合)

表 1: 配置するファイルは、使用するコンパイル モデルによって異なります。

これまでの経緯を振り返る

どのようなコンパイル方法を使用するかは、Visual Studio で ASP.NET アプリケーションを管理する方法によってある程度異なります。 2000 年の .NET 開始以来、Visual Studio .NET 2002、Visual Studio .NET 2003、Visual Studio 2005、Visual Studio 2008 という 4 バージョンがあります。 Visual Studio .NET 2002 と 2003 では、"Web アプリケーション プロジェクト モデル" を使って ASP.NET アプリケーションを管理していました。 Web アプリケーション プロジェクト モデルの主な機能は次のとおりです。

  • プロジェクトを構成するファイルは、単一のプロジェクト ファイルで定義されます。 プロジェクト ファイルで定義されていないファイルは、Visual Studio では Web アプリケーションの一部とは見なされません。
  • 明示的なコンパイルを使用します。 プロジェクトをビルドすると、プロジェクト内のコード ファイルは、Bin フォルダーに置かれる 1 つのアセンブリにコンパイルされます。

Microsoft が Visual Studio 2005 をリリースした時点で、Web アプリケーション プロジェクト モデルのサポートが削除され、Web サイト プロジェクト モデルに置き換えられました。 Web サイト プロジェクト モデルは、次のように Web アプリケーション プロジェクト モデルと差別化されました。

  • プロジェクトのファイルを単一のプロジェクト ファイルで記述するのではなく、ファイル システムを使用します。 つまり、Web アプリケーション フォルダー (またはサブフォルダー) 内のすべてのファイルは、プロジェクトの一部と見なされます。
  • Visual Studio でプロジェクトをビルドしても、Bin ディレクトリにアセンブリは作成されません。 代わりに、Web サイト プロジェクトをビルドすると、コンパイル時エラーが報告されます。
  • 自動コンパイルのサポート。 Web サイト プロジェクトは通常、マークアップとソース コードを運用環境にコピーして配置されますが、コードは事前コンパイル (明示的なコンパイル) することができます。

Microsoft は、Visual Studio 2005 Service Pack 1 をリリースしたときに Web アプリケーション プロジェクト モデルを復活させました。 ただし、Visual Web Developer は引き続き Web サイト プロジェクト モデルのみをサポートしています。 良いニュースは、この制限が Visual Web Developer 2008 Service Pack 1 では削除されたことです。 現在、Web アプリケーション プロジェクト モデルまたは Web サイト プロジェクト モデルを使用して、Visual Studio (および Visual Web Developer) で ASP.NET アプリケーションを作成できます。 どちらのモデルにも長所と短所があります。 2 つのモデルの比較について「Web アプリケーション プロジェクトの概要」の「Web サイト プロジェクトと Web アプリケーション プロジェクトの比較」を参照し、状況に最適なプロジェクト モデルを決定してください。

サンプル Web アプリケーションの探索

このチュートリアルのダウンロードには、Book Reviewsという ASP.NET アプリケーションが含まれています。 この Web サイトは、誰かがブック レビューをオンライン コミュニティと共有するために作成したであろう、趣味の Web サイトを模倣しています。 この ASP.NET Web アプリケーションは非常にシンプルで、次のリソースで構成されています。

  • Web.config。アプリケーションの構成ファイル。

  • マスター ページ (Site.master)。

  • 7 つの異なる ASP.NET ページ:

    • ~/Default.aspx: サイトのホームページ。

    • ~/About.aspx: "このサイトについて" ページ。

    • ~/Fiction/Default.aspx: レビューした小説の一覧を示すページ。

      • ~/Fiction/Blaze.aspx: Richard Bachman の小説『Blaze』のレビュー。
    • ~/Tech/Default.aspx: レビューした技術書の一覧を示すページ。

      • ~/Tech/CYOW.aspx: 『Create Your Own Website』のレビュー。
      • ~/Tech/TYASP35.aspx: 『Teach Yourself ASP.NET 3.5 in 24 Hours』のレビュー。
  • Styles フォルダー内の 3 つの異なる CSS ファイル。

  • 4 つの画像ファイル: Powered by ASP.NET ロゴと、3 冊のレビューした書籍の画像はすべて Images フォルダー内にあります。

  • Web.sitemap ファイル。サイト マップを定義しており、ルート ディレクトリおよび FictionTech フォルダーの Default.aspx ページでメニューを表示するために使われます。

  • 基底 Page クラスを定義する BasePage.cs という名前のクラス ファイル。 このクラスは、サイト マップ内のページの位置に基づいて Title プロパティを自動的に設定し、Page クラスの機能を拡張します。 簡単に言うと、(System.Web.UI.Page ではなく) BasePage を拡張するASP.NET 分離コード クラスのタイトルは、サイト マップでの位置に応じた値に設定されます。 たとえば、~/Tech/CYOW.aspx ページを表示する場合、タイトルは "ome : Technology : Create Your Own Website" に設定されます。

図 1 は、ブラウザーで表示された Book Reviews Web サイトのスクリーン ショットを示しています。 ここでは ~/Tech/TYASP35.aspx のページが表示されます。このページでは、『Teach Yourself ASP.NET 3.5 in 24 Hours』をレビューしています。 ページの上部と左側の列のメニューにまたがる階層リンクは、Web.sitemap で定義されているサイト マップ構造に基づいています。 右上隅の画像は、Images フォルダー内にある表紙画像の 1 つです。 Web サイトの外観は、Styles フォルダー内 の CSS で記述したカスケード スタイル シート ルールを使用して定義され、包括的なページ レイアウトはマスター ページ (Site.master) で定義されます。

The Book Reviews website offers reviews on an assortment of titles

図 1: Book Reviews Web サイトでは、さまざまなタイトルに関するレビューが表示されます (クリックするとフルサイズの画像が表示されます)

このアプリケーションはデータベースを使用しません。各レビューは、アプリケーションで個別の Web ページとして実装されます。 このチュートリアル (および次のいくつかのチュートリアル) では、データベースを持たない Web アプリケーションの配置について説明します。 ただし、今後のチュートリアルでは、レビュー、閲覧者コメント、その他の情報をデータベース内に格納するようにこのアプリケーションを強化し、データ駆動型 Web アプリケーションを正しく配置するために必要な手順について説明します。

Note

これらのチュートリアルでは、Web ホスト プロバイダーを使用して ASP.NET アプリケーションをホストすることに重点を置き、ASP.NET のサイト マップ システムや、ベース Page クラスの使用などの補助的なトピックは扱いません。 これらのテクノロジの詳細と、チュートリアル全体で取り上げるその他のトピックの背景については、各チュートリアルの最後にある「もっと読む」セクションを参照してください。

このチュートリアルのダウンロードには、Web アプリケーションの 2 つのコピーがあり、それぞれが異なる Visual Studio プロジェクトの種類として実装されています (BookReviewsWAP、Web アプリケーション プロジェクト、Web サイト プロジェクト BookReviewsWSP)。 どちらのプロジェクトも Visual Web Developer 2008 SP1 で作成され、ASP.NET 3.5 SP1 を使用しています。 これらのプロジェクトの作業を行うには、まずコンテンツをデスクトップに解凍します。 Web アプリケーション プロジェクト (BookReviewsWAP) を開くには、BookReviewsWAP フォルダーに移動し、ソリューション ファイル BookReviewsWAP.sln をダブルクリックします。 Web サイト プロジェクト (BookReviewsWSP) を開くには、Visual Studio を起動した後、[ファイル] メニューの [Web サイトを開く] オプションを選択し、デスクトップ上の BookReviewsWSP フォルダーを参照して [OK] をクリックします。

このチュートリアルの残りの 2 つのセクションでは、アプリケーションの配置時に運用環境にコピーする必要があるファイルを確認します。 次の 2 つのチュートリアル「FTP クライアントを使用してサイトを配置する」と「Visual Studio を使用してサイトを配置する」では、これらのファイルを Web ホスト プロバイダーにコピーする複数の方法が説明されています。

Web アプリケーション プロジェクト用に配置するファイルを判断する

Web アプリケーション プロジェクト モデルでは、明示的なコンパイルを使用します。プロジェクトのソース コードは、アプリケーションをビルドするたびに 1 つのアセンブリにコンパイルされます。 このコンパイルには、ASP.NET ページの分離コード ファイル (~/Default.aspx.cs、~/About.aspx.cs など) と BasePage.cs クラスが含まれます。 結果のアセンブリは BookReviewsWAP.dll という名前で、アプリケーションの Bin ディレクトリに置かれます。

図 2 は、Book Reviews Web アプリケーション プロジェクトを構成するファイルを示しています。

The Solution Explorer lists the files that comprise the Web Application Project

図 2: ソリューション エクスプローラーに、Web アプリケーション プロジェクトを構成するファイルの一覧が表示されています

Web アプリケーション プロジェクト モデルを使用して開発された ASP.NET アプリケーションを配置するには、まず、最新のソース コードをアセンブリに明示的にコンパイルするようにアプリケーションをビルドします。 次に、以下のファイルを運用環境にコピーします。

  • ~/Default.aspx、~/About.aspx など、すべての ASP.NET ページの宣言型マークアップを含むファイル。 また、すべてのマスター ページとユーザー コントロールの宣言型マークアップをコピーします。
  • Bin フォルダー内のアセンブリ (.dll ファイル)。 プログラム データベース ファイル (.pdb) または Bin ディレクトリ内にある XML ファイルをコピーする必要はありません。

ASP.NET ページのソース コード ファイルを運用環境にコピーする必要も、BasePage.cs クラス ファイルをコピーする必要もありません。

Note

図 2 に示すように、BasePage クラスはプロジェクト内のクラス ファイルとして実装され、HelperClasses という名前のフォルダーに配置されます。 プロジェクトがコンパイルされると、BasePage.cs ファイル内のコードが、ASP.NET ページの分離コード クラスと共に 1 つのアセンブリ BookReviewsWAP.dll. にコンパイルされます。ASP.NET には、App_Code という、Web サイト プロジェクトのクラス ファイルを保持するように設計された特別なフォルダーがあります。 App_Code フォルダー内のコードは自動的にコンパイルされるため、Web アプリケーション プロジェクトでは使用しないでください。 代わりに、アプリケーションのクラス ファイルを、HelperClassesClasses または同様の名前を持つ通常のフォルダーに配置します。 または、クラス ファイルを別のクラス ライブラリ プロジェクトに配置することもできます。

ASP.NET 関連マークアップ ファイルのコピーと Bin フォルダー内のアセンブリに加え、クライアント側のサポート ファイル (画像、CSS ファイルなど) と、他のサーバー側サポート ファイル (Web.configWeb.sitemap など) をコピーする必要があります。 明示的コンパイルと自動コンパイルのどちらを使用するかに関係なく、これらのクライアント側およびサーバー側のサポート ファイルを運用環境にコピーする必要があります。

Web サイト プロジェクト ファイル用に配置するファイルを判断する

Web サイト プロジェクト モデルでは、自動コンパイルがサポートされています。これは Web アプリケーション プロジェクト モデルを使用する場合には使用できない機能です。 明示的なコンパイルでは、プロジェクトのソース コードをアセンブリにコンパイルし、そのアセンブリを運用環境にコピーする必要があります。 一方、自動コンパイルでは、ソース コードを運用環境にコピーするだけで済みます。必要に応じてランタイムによってオンデマンドでコンパイルされます。

Visual Studio の [ビルド] メニュー オプションは、Web アプリケーション プロジェクトと Web サイト プロジェクトの両方にあります。 Web アプリケーション プロジェクトをビルドすると、プロジェクトのソース コードが Bin ディレクトリ内の 1 つのアセンブリにコンパイルされます。Web サイト プロジェクトをビルドすると、コンパイル時のエラーがチェックされますが、アセンブリは作成されません。 Web サイト プロジェクト モデルを使用して開発された ASP.NET アプリケーションを配置するのに必要なことは、適切なファイルを運用環境にコピーするだけですが、最初にプロジェクトをビルドしてコンパイル時エラーが発生しないことを確認するのをお勧めします。

図 3 は、Book Reviews Web サイト プロジェクトを構成するファイルを示しています。

The Solution Explorer lists the files that comprise the Web Site Project

図 3: ソリューション エクスプローラーに Web サイト プロジェクトを構成するファイルが一覧表示されます

Web サイト プロジェクトを配置するには、運用環境にすべての ASP.NET 関連ファイルをコピーする必要があります。これには、ASP.NET ページ、マスター ページ、ユーザー コントロールのマークアップ ページとそのコード ファイルが含まれます。 また、BasePage.cs などのクラス ファイルをコピーする必要があります。 BasePage.cs ファイルは、Web サイト プロジェクトで使用される特別なクラス ファイル用 ASP.NET フォルダーである App_Code フォルダーに置かれていることに注意してください。 特別なフォルダーは運用環境でも作成する必要があります。開発環境の App_Code フォルダー内のクラス ファイルは、運用環境の App_Code フォルダーにコピーする必要があります。

ASP.NET マークアップとソース コード ファイルをコピーするだけでなく、クライアント側のサポート ファイル (画像、CSS ファイル) と、他のサーバー側のサポート ファイル (Web.configWeb.sitemap) をコピーする必要もあります。

Note

Web サイト プロジェクトでは、明示的なコンパイルを使用することもできます。 今後のチュートリアルでは、Web サイト プロジェクトを明示的にコンパイルする方法について説明します。

まとめ

ASP.NET アプリケーションを配置するには、開発環境から運用環境に必要なファイルをコピーする必要があります。 同期する必要があるファイルの正確なセットは、ASP.NET アプリケーションのコードを明示的にコンパイルするか、自動的にコンパイルするかによって異なります。 使用するコンパイル戦略は、Visual Studio ASP.NET アプリケーションを管理するのに、Web アプリケーション プロジェクト モデルと Web サイト プロジェクト モデルのどちらを使用するように構成されているかによって影響を受けます。

Web アプリケーション プロジェクト モデルでは、明示的なコンパイルが使用され、プロジェクトのコードが Bin フォルダー内の 1 つのアセンブリにコンパイルされます。 アプリケーションを配置するときは、ASP.NET ページのマークアップ部分と Bin フォルダーの内容を運用環境にプッシュする必要があります。アプリケーション内のソース コード (コード ファイルや分離コード クラスなど) を運用環境にコピーする必要はありません。

Web サイト プロジェクト モデルでは既定で自動コンパイルが使用されますが、今後のチュートリアルで説明するように、Web サイト プロジェクトを明示的にコンパイルすることもできます。 自動コンパイルを使用する ASP.NET アプリケーションを配置するには、マークアップ部分とソース コードの "両方" を運用環境にコピーする必要があります。 コードは、初めて要求されたときに、運用環境で自動的にコンパイルされます。

開発環境と運用環境の間で同期する必要があるファイルを確認したので、Book Reviews アプリケーションを Web ホスト プロバイダーに配置する準備ができました。

プログラミングに満足!

もっと読む

この記事で説明したトピックの詳細については、次のリソースを参照してください。