Share via


Web サイトを事前コンパイルする (VB)

作成者: Scott Mitchell

Visual Studio には、開発者 ASP.NET Web アプリケーション プロジェクト (WAP) と Web サイト プロジェクト (WSP) の 2 種類のプロジェクトが用意されています。 2 つのプロジェクトの種類の主な違いの 1 つは、展開前に WAP でコードを明示的にコンパイルする必要があるのに対し、WSP 内のコードは Web サーバー上で自動的にコンパイルできることです。 ただし、展開前に WSP をプリコンパイルすることはできます。 このチュートリアルでは、プリコンパイルの利点について説明し、Visual Studio 内とコマンド ラインから Web サイトをプリコンパイルする方法について説明します。

はじめに

Visual Studio には、開発者 ASP.NET Web アプリケーション プロジェクト (WAP) と Web サイト プロジェクト (WSP) の 2 種類のプロジェクトが用意されています。 これらのプロジェクトの種類の主な違いの 1 つは、WAP では 明示的なコンパイル が必要ですが、WSP では 既定で自動コンパイルが使用されます。 WAP を使用すると、Web アプリケーションのコードを 1 つのアセンブリにコンパイルし、Web サイトの Bin フォルダーに作成します。 配置では、プロジェクト内のマークアップ コンテンツ ( .aspx.ascx、、および ファイル) を .master フォルダー内のアセンブリと共に Bin コピーする必要があります。分離コード クラス ファイル自体を配置する必要はありません。 一方、マークアップ ページとそれに対応する分離コード クラスの両方を運用環境にコピーして、WSP を展開します。 分離コード クラスは、Web サーバー上でオンデマンドでコンパイルされます。

Note

プロジェクト モデルの違い、明示的コンパイルと自動コンパイル、およびコンパイル モデルの配置への影響の詳細については、「 配置する必要があるファイルの決定 」チュートリアル の「明示的コンパイルと自動コンパイル」セクションに戻ってください。

自動コンパイル オプションは簡単に使用できます。 明示的なコンパイル 手順はなく、変更されたファイルのみを展開する必要がありますが、明示的なコンパイルでは変更されたマークアップ ページと Just-compiled アセンブリを展開する必要があります。 ただし、自動デプロイには、次の 2 つの潜在的な欠点があります。

  • 最初にアクセスしたときにページを自動的にコンパイルする必要があるため、展開後に ASP.NET ページが初めて要求されると、短いが顕著な遅延が発生する可能性があります。
  • 自動コンパイルでは、宣言型マークアップとソース コードの両方が Web サーバーに存在する必要があります。 Web アプリケーションを Web サーバーにインストールする顧客に販売する予定の場合、これは魅力的でないオプションになる可能性があります。

上記の 2 つの欠点のいずれかが案件ブレーカーの場合は、WAP モデルに切り替えるか、展開する前に WSP を プリコンパイル できます。 このチュートリアルでは、ホストされている Web サイトに最適なプリコンパイル オプションについて説明し、プリコンパイル プロセスとプリコンパイル済み Web サイトのデプロイについて説明します。

ASP.NET コードの生成とコンパイルの概要

使用可能なプリコンパイル オプションを見る前に、最初に、ASP.NET ページが作成または最後に更新されてから初めて要求されたときに発生するコードの生成とコンパイルについて説明します。 ご存知のように、ASP.NET ページは、ファイル内 .aspx の宣言型マークアップと、通常は別の分離コード クラス ファイル (.aspx.vb) 内のソース コード部分の 2 つの部分で構成されています。 ASP.NET ページが要求されたときにランタイムによって実行される手順は、アプリケーションのコンパイル モデルによって異なります。

WAP では、ページのソース コードをデプロイする前に、1 つのアセンブリに明示的にコンパイルする必要があります。 配置中に、このアセンブリとさまざまなマークアップ ページが運用環境にコピーされます。 ASP.NET ページの Web サーバーに要求が到着すると、ランタイムはページの分離コード クラスのインスタンスを作成し、そのメソッドを ProcessRequest 呼び出します。これにより、ページのライフサイクルが開始され、最終的に、要求元に返されるページのコンテンツが生成されます。 ランタイムは、配置前に分離コード クラスが既にアセンブリにコンパイルされているため、ASP.NET ページの分離コード クラスを操作できます。

WSP と自動コンパイルでは、展開前に明示的なコンパイル 手順はありません。 代わりに、デプロイでは、宣言型とソース コードの両方のコンテンツを運用環境にコピーする必要があります。 ページが作成または最後に更新されてから、ASP.NET ページの Web サーバーに要求が初めて到着した場合、ランタイムは最初に分離コード クラスをアセンブリにコンパイルする必要があります。 このコンパイル済みアセンブリは、 フォルダー%WINDIR%\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Filesに保存されますが、このフォルダーの場所は の Web.config要素を<pages>使用してカスタマイズできます。 アセンブリはディスクに保存されるため、同じページに対する後続の要求で再コンパイルする必要はありません。

Note

ご期待のとおり、サーバーがページのコードをコンパイルし、結果のアセンブリをディスクに保存するのに少し時間がかかるため、自動コンパイルを使用するサイトで初めて (または変更されてから初めて) ページを要求すると、若干の遅延が発生します。

つまり、明示的なコンパイルでは、デプロイ前に Web サイトのソース コードをコンパイルする必要があり、ランタイムがその手順を実行する必要がなくなります。 自動コンパイルを使用すると、ランタイムはページのソース コードのコンパイルを処理しますが、ページが作成または最後に更新されてからの最初のアクセスにはわずかな初期化コストがかかります。

しかし、ASP.NET ページ(ファイル)の .aspx 宣言部分はどうでしょうか? 宣言型マークアップで定義されている Web コントロールにコードでアクセス可能であるため、ファイルと分離コード クラスのコード間 .aspx にリレーションシップがあることは明らかです。 また、ファイル内 .aspx のコンテンツが、ページによって生成されるレンダリングされたマークアップに大きく影響していることも明らかです。 では、ランタイムは、要求されたページのレンダリングされたコンテンツを生成するために、ファイルで .aspx 定義されているテキスト、HTML、および Web コントロールの構文をどのように処理しますか?

私はWAPとWSPの間で異なる低レベルの実装の詳細をあまり追跡したくないが、簡単に言えば、ランタイムは保護されたメンバーとメソッドとしてさまざまなWebコントロールを含むクラスファイルを自動的に生成する。 この生成されたファイルは、対応する分離コード クラスの部分クラス として実装されます。 (部分クラス を使用すると、1 つのクラスの内容を複数のファイルに分散できます)。そのため、分離コード クラスは、作成するファイルと、ランタイムによって作成された自動生成されたクラスの 2 つの場所 .aspx.vb で定義されます。 この自動生成されたクラスは、 フォルダーに %WINDIR%\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files 格納されます。

ここで重要なのは、ランタイムによって ASP.NET ページをレンダリングするには、宣言型とソース コードの両方の部分をアセンブリにコンパイルする必要があるということです。 WAP では、展開前にソース コードがアセンブリに明示的にコンパイルされますが、宣言型マークアップは引き続きコードに変換され、Web サーバー上のランタイムによってコンパイルされる必要があります。 自動コンパイルを使用する WSP では、ソース コードと宣言型マークアップの両方を Web サーバーによってコンパイルする必要があります。

WSP モデルで明示的なコンパイルを使用できます。 WAP モデルと同様に、ソース コード部分を明示的にコンパイルできます。 さらに、宣言型マークアップをコンパイルすることもできます。

プリコンパイル オプション

.NET Frameworkには、WSP モデルを使用して構築された ASP.NET アプリケーションのソース コード (さらにはコンテンツ) をコンパイルできる ASP.NET コンパイル ツール (aspnet_compiler.exe) が付属しています。 このツールは、.NET Framework バージョン 2.0 でリリースされ、 フォルダーにあります%WINDIR%\Microsoft.NET\Framework\v2.0.50727。コマンド ラインから使用することも、[ビルド] メニューの [Web サイトの発行] オプションを使用して Visual Studio 内から起動することもできます。

コンパイル ツールには、インプレース プリコンパイルと配置のプリコンパイルという 2 つの一般的な形式のコンパイルが用意されています。 インプレース プリコンパイルでは、コマンド ラインからツールを実行 aspnet_compiler.exe し、コンピューター上にある Web サイトの仮想ディレクトリまたは物理パスへのパスを指定します。 その後、コンパイル ツールはプロジェクト内の各 ASP.NET ページをコンパイルし、各ページがブラウザーから初めてアクセスされた場合と同様に、コンパイル済みバージョン %WINDIR%\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files をフォルダーに格納します。 インプレース プリコンパイルでは、この手順を実行する必要がランタイムに軽減されるため、サイト上の新しく展開された ASP.NET ページに対する最初の要求が高速化される可能性があります。 ただし、インプレース プリコンパイルは、Web サーバーのコマンド ラインからプログラムを実行できる必要があるため、ホストされている Web サイトの大部分では役に立ちません。 共有ホスティング環境では、このレベルのアクセスは許可されません。

Web サイト内のページを フォルダーに Temporary ASP.NET Files コンパイルする代わりに、展開のプリコンパイルによって、ページが選択したディレクトリにコンパイルされ、運用環境に展開できる形式になります。

このチュートリアルで説明する展開のプリコンパイルには、更新可能なユーザー インターフェイスを使用したプリコンパイルと、更新不可能なユーザー インターフェイスを使用したプリコンパイルの 2 つのフレーバーがあります。 更新可能なユーザー インターフェイスを使用したプリコンパイルでは、宣言型マークアップは 、.ascx、および .master ファイルに.aspx残されるため、開発者は運用環境サーバー上の宣言型マークアップを表示したり、必要に応じて変更したりできます。 更新不可能なユーザー インターフェイスを使用したプリコンパイルでは、コンテンツの無効なページが生成.aspxされ、ファイルと .master ファイルが削除.ascxされるため、宣言型マークアップが非表示になり、開発者が運用環境から変更できなくなります。

更新可能なユーザー インターフェイスを使用した配置のプリコンパイル

配置のプリコンパイルを理解する最善の方法は、実際の例を確認することです。 更新可能なユーザー インターフェイスを使用して、展開用のブック レビュー WSP をプリコンパイルしてみましょう。 ASP.NET コンパイル ツールは、Visual Studio の [ビルド] メニューまたはコマンド ラインから呼び出すことができます。 このセクションでは、Visual Studio 内からツールを使用する方法について説明します。「コマンド ラインからのプリコンパイル」セクションでは、コマンド ラインからコンパイラ ツールを実行する方法を確認します。

Visual Studio でブック レビュー WSP を開き、[ビルド] メニューに移動し、[Web サイトの発行] メニュー オプションを選択します。 これにより、[Web サイトの発行] ダイアログ ボックス ( 図 1 を参照) が起動します。このダイアログ ボックスでは、ターゲットの場所、プリコンパイル済みサイトのユーザー インターフェイスが更新可能かどうか、およびその他のコンパイラ ツール オプションを指定できます。 ターゲットの場所はリモート Web サーバーまたは FTP サーバーにすることができますが、ここではコンピューターのハード ドライブ上のフォルダーを選択します。 更新可能なユーザー インターフェイスを使用してサイトをプリコンパイルするため、[このプリコンパイル済みサイトを更新可能にする] チェック ボックスをオンのままにして、[OK] をクリックします。

ドット NET コンパイル ツールが Web サイトをプリコンパイルする方法を示すスクリーンショット。

図 1: ASP.NET コンパイル ツールは、指定されたターゲットの場所に Web サイトをプリコンパイルします
(クリックするとフルサイズの画像が表示されます)

Note

[ビルド] メニューの [Web サイトの発行] オプションは、Visual Web Developer では使用できません。 Visual Web Developer を使用している場合は、「コマンド ラインからのプリコンパイル」セクションで説明されている ASP.NET コンパイル ツールのコマンド ライン バージョンを使用する必要があります。

Web サイトをプリコンパイルしたら、[Web サイトの発行] ダイアログ ボックスで入力したターゲットの場所に移動します。 このフォルダーの内容と Web サイトの内容を比較してください。 図 2 は、ブック レビュー Web サイト フォルダーを示しています。 と の両方.aspx.aspx.csのファイルが含まれていることに注意してください。 また、ディレクトリには、Elmah.dll前のBinチュートリアルで追加した ファイル が 1 つだけ含まれていること注意してください。

プロジェクト ディレクトリ内のドット a s p x とドット a s p x dot c s ファイルを示すスクリーンショット。

図 2: Project ディレクトリに含まれている .aspx ファイルと .aspx.cs ファイル。フォルダーには Bin Just が含まれています Elmah.dll
(クリックするとフルサイズの画像が表示されます)

図 3 は、ASP.NET コンパイル ツールによってコンテンツが作成されたターゲットの場所フォルダーを示しています。 このフォルダーには分離コード ファイルは含まれません。 さらに、このフォルダーの Bin ディレクトリには、アセンブリに加えて、複数のアセンブリと 2 つの .compiled ファイルが Elmah.dll 含まれています。

ターゲットの場所フォルダーに配置するファイルを示すスクリーンショット。

図 3: ターゲットの場所フォルダーには、展開用のファイルが含まれています
(クリックするとフルサイズの画像が表示されます)

WAP での明示的なコンパイルとは異なり、展開プロセスのプリコンパイルでは、サイト全体に対して 1 つのアセンブリは作成されません。 代わりに、複数のページをまとめて各アセンブリにバッチ処理します。 また、ファイル (存在する Global.asax 場合) を独自のアセンブリとフォルダー内のクラスに App_Code コンパイルします。 ASP.NET Web ページ、ユーザー コントロール、マスター ページ (.aspx.ascx、、および.masterファイル) の宣言型マークアップを保持するファイルは、そのままターゲットの場所ディレクトリにコピーされます。 同様に Web.config 、ファイルはイメージ、CSS クラス、PDF ファイルなどの静的ファイルと共に直接コピーされます。 コンパイル ツールでさまざまなファイルの種類を処理する方法の詳細については、「ASP.NET プリコンパイル中のファイル処理」を参照してください。

Note

[Web サイトの発行] ダイアログ ボックスの [固定の名前付けと単一ページ アセンブリを使用] チェック ボックスをオンにすることで、ASP.NET ページ、ユーザー コントロール、またはマスター ページごとに 1 つのアセンブリを作成するようにコンパイル ツールに指示できます。 各 ASP.NET ページを独自のアセンブリにコンパイルすると、デプロイをよりきめ細かく制御できます。 たとえば、1 つの ASP.NET Web ページを更新し、その変更を展開する必要がある場合は、そのページの .aspx ファイルと関連するアセンブリのみを運用環境に展開する必要があります。 詳細については、「 方法: ASP.NET コンパイル ツールを使用して固定名を生成 する」を参照してください。

ターゲットの場所ディレクトリには、プリコンパイル済み Web プロジェクトの一部ではないファイル (つまり PrecompiledApp.config) も含まれています。 このファイルは、ASP.NET ランタイムに、アプリケーションがプリコンパイル済みであり、更新可能な UI と更新可能な正午の UI のどちらを使用してプリコンパイルされたかを通知します。

最後に、Visual Studio または任意のテキスト エディターを .aspx 使用して、ターゲットの場所にあるいずれかのファイルを開きます。 更新可能なユーザー インターフェイスを使用して配置をプリコンパイルする場合、ターゲットの場所ディレクトリ内の ASP.NET ページには、Web サイト内の対応するファイルとまったく同じマークアップが含まれます。

更新不可能なユーザー インターフェイスを使用した配置のプリコンパイル

ASP.NET コンパイラ ツールを使用して、更新不可能な UI を使用して展開用のサイトをプリコンパイルすることもできます。 更新不可能な UI を使用してサイトをプリコンパイルすることは、更新可能な UI でのプリコンパイルと同様に機能します。主な違いは、ターゲット ディレクトリ内の ASP.NET ページ、ユーザー コントロール、マスター ページがマークアップから削除されることです。 更新不可能な UI を使用して Web サイトを展開するためにプリコンパイルするには、[ビルド] メニューの [Web サイトの発行] オプションを選択しますが、[このプリコンパイル済みサイトを更新可能にする] オプションをオフにします ( 図 4 を参照)。

[このプリコンパイル済みサイトを更新可能にする] オプションを示すスクリーンショット。

図 4: [このプリコンパイル済みサイトを更新可能にする] オプションをオフにして、更新不可能な UI でプリコンパイルする
(クリックするとフルサイズの画像が表示されます)

図 5 は、更新不可能なユーザー インターフェイスを使用してプリコンパイルした後のターゲットの場所フォルダーを示しています。

更新不可能な UI を含むデプロイのターゲットの場所フォルダーを示すスクリーンショット。

図 5: 更新不可能な UI を使用した展開のターゲットの場所フォルダー
(クリックするとフルサイズの画像が表示されます)

図 3図 5 を比較します。 2 つのフォルダーは同じように見えるかもしれませんが、更新できない UI フォルダーにはマスター ページ Site.masterがないことに注意してください。 図 5 にはさまざまな ASP.NET ページが含まれていますが、これらのファイルの内容を表示すると、宣言型マークアップが削除され、プレースホルダー テキストに置き換えられていることがわかります。"これはプリコンパイル ツールによって生成されたマーカー ファイルであり、削除しないでください。

宣言型マークアップが p ドット NET ページから削除されたことを示すスクリーンショット。

図 5: 宣言型マークアップが ASP.NET ページから削除されました

図 3 と図5 のフォルダーはBin、より大きく異なります。 アセンブリに加えて、図 5Binフォルダーには、各 ASP.NET ページ、ユーザー コントロール、マスター ページのファイルが含まれています.compiled

更新不可能な UI を使用してサイトをプリコンパイルすると、運用環境で Web サイトをインストールまたは管理するユーザーまたは会社が ASP.NET ページのコンテンツを変更したくない場合に便利です。 顧客が自分の Web サーバーにインストールするために販売する ASP.NET Web アプリケーションを構築する場合は、配布するページを直接編集して、サイトの外観を .aspx 変更しないようにすることができます。 更新不可能な UI を使用して Web サイトをプリコンパイルすると、プレースホルダー .aspx ページがインストールの一部として配布されるため、顧客がコンテンツを調べたり変更したりできなくなります。

コマンド ラインからのプリコンパイル

Visual Studio の [Web サイトの発行] ダイアログ ボックスは、ASP.NET コンパイル ツール (aspnet_compiler.exe) を呼び出して Web サイトをプリコンパイルします。 または、コマンド ラインからこのツールを呼び出すこともできます。 実際、Visual Web Developer を使用する場合は、Visual Web Developer の [ビルド] メニューに [Web サイトの発行] オプションが含まれていないので、コマンド ラインからコンパイラ ツールを実行する必要があります。

コマンド ラインからコンパイラ ツールを使用するには、まずコマンド ラインにドロップし、 %WINDIR%\Microsoft.NET\Framework\v2.0.50727フレームワーク ディレクトリ に移動します。 次に、コマンド ラインに次のステートメントを入力します。

aspnet_compiler -p "physical_path_to_app" -v / -f -u "target_location_folder"

上記のコマンドは、ASP.NET コンパイラ ツール (aspnet_compiler.exe) を起動し、スイッチを -p 介して、 physical_path_to_appにルート化された Web サイトをプリコンパイルするように指示します。この値は のような C:\MySites\BookReviewsものであり、引用符で区切る必要があります。

スイッチは -v 、サイトの仮想ディレクトリを指定します。 サイトが IIS メタベースの既定の Web サイトとして登録されている場合は、スイッチを -p 省略して、アプリケーションの仮想ディレクトリを指定できます。 スイッチを使用する -p 場合、スイッチを続行する -v 値は Web サイトのルートを示し、アプリケーション ルート参照を解決するために使用されます。 たとえば、 の -v /MySite 値を指定した場合、アプリケーション ~/path/file 内の 参照は として ~/MySite/path/file解決されます。 ブックレビューサイトは私のウェブホスティング会社のルートディレクトリに置かれているので、私はスイッチ -v /を使用しました。

スイッチが -f 存在する場合、 target_location_folder ディレクトリが既に存在する場合は上書きするようにコンパイル ツールに指示します。 スイッチを -f 省略し、ターゲットの場所フォルダーが既に存在する場合、コンパイル ツールは"エラー ASPRUNTIME: ターゲット ディレクトリが空ではありません" というエラーで終了します。 手動で削除するか、別のターゲットを選択してください。

スイッチが -u 存在する場合は、更新可能なユーザー インターフェイスを作成するようにツールに通知します。 更新不可能なユーザー インターフェイスを使用してサイトをプリコンパイルするには、このスイッチを省略します。

最後に、 target_location_folder はターゲットの場所ディレクトリへの物理パスです。この値は のようになります C:\MySites\Output\BookReviews。引用符で区切る必要があります。

プリコンパイル済み Web サイトの展開

この時点で、ASP.NET コンパイル ツールを使用して、更新可能なユーザー インターフェイス オプションと更新不可能なユーザー インターフェイス オプションの両方を使用して Web サイトをプリコンパイルする方法について説明しました。 ただし、これまでの例では、運用環境ではなくローカル フォルダーに Web サイトをプリコンパイルしています。 良いニュースは、プリコンパイル済み Web サイトのデプロイは簡単で、Visual Studio またはスタンドアロン FTP クライアントなどの他のファイル コピー メカニズムを使用して実行できることです。

[Web サイトの発行] ダイアログ ボックス ( 図 1 に最初に示す) には、プリコンパイル済み Web サイト ファイルのコピー先を示すターゲットの場所オプションがあります。 この場所には、リモート Web サーバーまたは FTP サーバーを指定できます。 このテキスト ボックスにリモート サーバーを入力すると、1 つの手順で指定したサーバーに Web サイトがプリコンパイルされ、展開されます。 または、Web サイトをローカル フォルダーにプリコンパイルしてから、FTP またはその他の方法で、そのフォルダーの内容を運用環境に手動でコピーすることもできます。

Visual Studio の [Web サイトの発行] ダイアログ ボックスを使用してプリコンパイル済み Web サイトを自動的に展開すると、開発環境と運用環境の間に構成の違いがない単純なサイトに役立ちます。 ただし、「 開発と運用の間の一般的な構成の違い 」チュートリアル で説明されているように、このような違いが存在することは珍しくありません。 たとえば、Book Reviews Web アプリケーションでは、開発環境とは異なるデータベースが運用環境で使用されます。 Visual Studio が Web サイトをリモート サーバーに発行すると、開発環境で構成ファイル情報が盲目的にコピーされます。

開発環境と運用環境の構成が異なるサイトの場合は、サイトをローカル ディレクトリにプリコンパイルし、運用固有の構成ファイルをコピーしてから、プリコンパイル済み出力の内容を運用環境にコピーすることをお勧めします。

開発環境から運用環境へのファイルのコピーに関する更新については、「 FTP クライアントを使用した Web サイトの展開 」および 「Visual Studio を使用した Web サイトの展開」 のチュートリアルを参照してください。

まとめ

ASP.NET では、自動と明示的の 2 つのコンパイル モードがサポートされています。 前のチュートリアルで説明したように、Web アプリケーション プロジェクト (WAP) では明示的なコンパイルが使用されますが、Web サイト プロジェクト (WSP) では既定で自動コンパイルが使用されます。 ただし、ASP.NET コンパイル ツールを使用して、デプロイ前に WSP を明示的にコンパイルできます。

このチュートリアルでは、コンパイル ツールの展開サポートのプリコンパイルに焦点を当てています。 配置用にプリコンパイルする場合、コンパイル ツールはターゲットの場所フォルダーを作成し、指定された Web アプリケーションのソース コードをコンパイルし、これらのコンパイル済みアセンブリとコンテンツ ファイルをターゲットの場所フォルダーにコピーします。 コンパイル ツールは、更新可能または更新不可能なユーザー インターフェイスを作成するように構成できます。 更新不可能なユーザー インターフェイス オプションを使用してプリコンパイルすると、コンテンツ ファイル内の宣言型マークアップが削除されます。 簡単に言うと、プリコンパイルでは、ソース コード ファイルを含めず、必要に応じて宣言型マークアップを削除せずに、Web サイト プロジェクト ベースのアプリケーションを展開できます。

幸せなプログラミング!

もっと読む

このチュートリアルで説明するトピックの詳細については、次のリソースを参照してください。

PreviousNext /previous-versions/aspnet/bb398860(v=vs.100)