この記事では、Microsoft ASP.NET アプリケーションで分離コード クラス ファイルを使用する.aspx ページを開発する方法について説明します。 この記事のコード サンプルには、プリコンパイルされる分離コード クラス ファイルと、必要に応じてコンパイルされる分離コード クラス ファイルの両方の要件が含まれています。
元の製品バージョン: ASP.NET
元の KB 番号: 308143
要件
次の一覧は、必要な推奨ハードウェア、ソフトウェア、およびネットワーク インフラストラクチャの概要を示しています。
- Windows
- .NET Framework
- インターネット インフォメーション サービス (IIS)
Visual C# .NET を使用して ASP.NET Web アプリケーションを作成する
このセクションでは、 CodeBehindSamples という名前の新しい ASP.NET Web アプリケーションを作成する方法について説明します。
- Visual Studio .NET を起動します。
- [ファイル] メニューの [新規作成] をポイントし、 [プロジェクト] をクリックします。
- [プロジェクトの種類で、Visual C# プロジェクトをクリックします。 [ Templates で、[Web アプリケーション ASP.NET クリックします。
- [ Name ボックスに、「 CodeBehindSamples」と入力します。 [ Location ボックスに、 ServerName を入力します。 ローカル サーバーを使用している場合は、 Location を
http://localhost
のままにします。
分離コード クラス ファイルを使用する
.aspx ページで分離コード クラス ファイルを使用する場合は、プレゼンテーション コードをコア アプリケーション ロジック (または分離コード) から分離できます。 分離コード クラス ファイルは、作成してオブジェクトとして使用できるようにコンパイルされます。 これにより、そのプロパティ、メソッド、およびイベント ハンドラーにアクセスできます。 これを機能させるには、.aspx ページで分離コードの基本クラスから継承するように指定する必要があります。 これを行うには、@ Page
ディレクティブのInherits
属性を使用します。 .aspx ページは分離コード クラスを継承し、分離コード クラスは Page
クラスから継承します。
既定では、Visual Studio .NET を使用している場合、 Codebehind
属性が @ Page
ディレクティブに追加されます。 .NET Framework では、この属性は実際には使用されません。 代わりに、Visual Studio .NET では、この属性を使用して、.aspx ページの関連する分離コード ファイルへの参照を保持します。
Visual Studio .NET で Codebehind
属性を使用する方法を示すには、 Codebehind
属性を削除します。 .aspx ページを右クリックし、[コードの表示] クリックすることはできません。 この動作は、Visual Studio .NET に、ページに使用できるクラス ファイルの参照が含われなくなったためです。 これは、.NET Framework が分離コード クラス ファイルを使用する方法ではなく、Visual Studio .NET がこれらのプロジェクト ファイルを管理する方法であることを忘れないでください。
プリコンパイル済みクラスで Inherits 属性を使用する
分離コード クラスをアセンブリにプリコンパイルする場合は、 Inherits
属性を使用して、継承元のクラスを指定できます。 このシナリオでは、アプリケーションをデプロイするときに、実際の分離コード クラス ファイルを含める必要はありません。 代わりに、アセンブリと .aspx ページを配置する必要があります。 アプリケーションを配置するときは、アプリケーションの Bin
フォルダーにアセンブリを配置する必要があります。
このセクションでは、プリコンパイル済みアプローチを使用し、分離コード クラスから継承する新しい Web フォームを作成する方法について説明します。
InheritSample.aspxという名前の新しい Web フォームを Visual Studio .NET プロジェクトに追加するには、次の手順に従います。
- ソリューション エクスプローラーで、プロジェクト ノードを右クリックし、[ 追加] をクリックし、[ Web フォームの追加] をクリックします。
- [ 名 ボックスに「 InheritSample.aspx」と入力し、[開く ] をクリック。
Design ビューに切り替え、Web フォーム Label コントロールを .aspx ページに追加します。
.aspx ページを右クリックし、[コードの表示 ] をクリック。 分離コード ファイルがエディターで開きます。
分離コード ファイルで、次のコードを
Page_Load
イベント ハンドラーに追加します。private void Page_Load(object sender, System.EventArgs e) { Label1.Text = "(Precompiled): Page_Load fired!"; }
Note
このコードは、後の手順で実行時にコード ビハインド クラスがサンプルに含まれることを示すだけです。
分離コード クラス ファイルからエディターの.aspx ページに切り替えてから、HTML ビューに切り替えます。
ページの上部で、
@ Page
ディレクティブのコードを確認します。 このコードは、次の既定のコードのようになります。<%@ Page language="c#" Codebehind="InheritSample.aspx.cs" AutoEventWireup="false" Inherits="CodeBehindSamples.InheritSample" %>
この例では、.aspx ページは、
CodeBehindSamples
名前空間のInheritSamples
という名前の分離コード クラスから継承します。 既定では、Visual Studio .NET で作成された Web アプリケーションでは、Inherits
属性値にProjectName.ClassName
構造体が使用されます。[ File メニューの [すべて保存] クリックして Web フォームおよびその他の関連するプロジェクト ファイルを保存します。
Visual Studio .NET IDE の Build メニューの Build をクリックしてプロジェクトをビルドします。
[プロジェクト] メニューの [すべてのファイルを表示] をクリックします。
ソリューション エクスプローラーで、クリックして
Bin
フォルダーを展開します。 前のセクション (この例では CodeBehindSamples.dll ) のプロジェクトをコンパイルするときに生成されるアセンブリは、Bin
フォルダーに表示されます。Visual Studio .NET で、ソリューション エクスプローラーのページを右クリックし、ブラウザーで [表示] をクリックしてコードを実行します。 ラベルには、次の値が設定されます。
(Precompiled): Page_Load fired!
Src 属性を使用し、オンデマンドでコンパイルする
コード ビハインド クラス ファイルがプリコンパイルされるのではなく、必要に応じてコンパイルされる場合は、 Src
属性を使用して分離コード クラス ファイルの相対パスを指定する必要があります。 このメソッドを使用してアプリケーションをデプロイする場合は、必ず実際のクラス ファイルを含めるようにしてください。
Note
Src
属性を使用して Visual Studio .NET でアプリケーションを開発するときの潜在的な問題の詳細については、この記事の「References」セクションを参照してください。 Visual Studio .NET は、このセクションで説明するコンパイル オンデマンド アプローチを使用する代わりに、アプリケーション コードをアセンブリにプリコンパイルすることを利用するように設計されています。
Visual Studio .NET でプロジェクトに SrcSample.aspx という名前の新しい Web フォームを追加するには、次の手順に従います。
- ソリューション エクスプローラーで、プロジェクト ノードを右クリックし、[ 追加] をクリックし、[ Web フォームの追加] をクリックします。
- [ 名 ボックスに「 SrcSample.aspx」と入力し、[開く ] をクリック。
Design ビューに切り替え、Web フォーム Label コントロールを .aspx ページに追加します。
.aspx ページを右クリックし、[コードの表示 ] をクリック。 分離コード ファイルがエディターで開きます。
分離コード ファイルで、次のコードを
Page_Load
イベントに追加します。private void Page_Load(object sender, System.EventArgs e) { Label1.Text = "(Src): Page_Load fired!"; }
分離コード クラス ファイルからエディターの.aspx ページに切り替えてから、HTML ビューに切り替えます。
ページの上部で、
@ Page
ディレクティブのコードを確認します。 このコードは、次の既定のコードのようになります。<%@ Page language="c#" Codebehind="SrcSample.aspx.cs" AutoEventWireup="false" Inherits="CodeBehindSamples.SrcSample"%>
この例を簡略化するには、プロジェクトから Global.asax ファイルを削除します。 これは、 Global.asax ファイルの分離コード ページに関連する追加のエラーを防ぐために、この例でのみ行われます。
[ File メニューの [すべて保存] クリックして Web フォームおよびその他の関連するプロジェクト ファイルを保存します。
Note
このサンプルの分離コード クラス ファイルをオンデマンドでコンパイルする必要があるため、ここでソリューションをビルドしないでください。
「 プリコンパイル済みクラスで Inherits 属性を使用する 」セクションに記載されている手順に従った場合は、このセクションの残りの手順に従う前に、アプリケーションの
Bin
ディレクトリ内のアセンブリを削除する必要があります。詳細については、この記事の「 トラブルシューティング 」セクションを参照してください。
ページを実行するには、Internet Explorer を起動し、ページの URL を手動で入力します。 Visual Studio .NET IDE の [ブラウザーで ビュー または Browse With オプションを選択しないでください。 それ以外の場合、Visual Studio .NET 2003 を使用している場合、コード ビハインド ページは既定で
Bin
ディレクトリにあるアセンブリにプリコンパイルされます。 ページを表示すると、次のようなエラー メッセージが表示されます。型 'CodeBehindSamples.SrcSample' を読み込めませんでした。
このエラーは、分離コード クラス ファイルがまだコンパイルされておらず、分離コード クラス ファイルを参照する
Src
属性がまだ含まれていないために発生します。次のように、
Src
属性を@ Page
ディレクティブに追加します。<%@ Page language="c#" Codebehind="SrcSample.aspx.cs" AutoEventWireup="false" Inherits="CodeBehindSamples.SrcSample" Src="SrcSample.aspx.cs"%>
Src
属性は分離コード クラス ファイル (SrcSample.aspx.cs) の相対パスと共に一覧表示され、Inherits
属性値はCodeBehindSamples.SrcSample
を参照するように設定されます。[ File メニューの [すべて保存] クリックして Web フォームおよびその他の関連するプロジェクト ファイルを保存します。 このサンプルの分離コード クラス ファイルをオンデマンドでコンパイルする必要があるため、ソリューションをビルドしないでください。
ページを実行するには、Internet Explorer を起動し、ページの URL を手動で入力します。 Visual Studio .NET IDE の [ブラウザーで ビュー または Browse With オプションを選択しないでください。 それ以外の場合、Visual Studio .NET 2003 を使用している場合、コード ビハインド ページは既定で
Bin
ディレクトリにあるアセンブリにプリコンパイルされます。 この時点で、ページがブラウザーに読み込まれ、ラベルに次の値が設定されます。(Src): Page_Load fired!
分離コード クラス ファイルがオンデマンドでコンパイルされ、正しく機能するようになりました。
トラブルシューティング
Visual Studio .NET でアプリケーションをプリコンパイルした後、
Src
属性を使用してオンデマンドコンパイルアプローチを適用しようとすると、次のようなエラー メッセージが表示されることがあります。コンパイラ エラー メッセージ: CS1595: 'ProjectName.CodeBehindClassName' は複数の場所で定義されています。 using definition from '%windir%:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files\YourProjectName\d1444413\36fce407\assembly\dl2\009389be\231afa2d_d586c301\YourAssemblyName。DLL'
エラー メッセージに表示されるパスの YourProjectName に続くディレクトリ名は、ASP.NET によってディレクトリとその名前が自動的に処理されるため、おそらく異なることがあります。
Src
属性を使用する場合は、次の手順に従って、エラー メッセージに関連する問題を解決する必要があります。エラー メッセージで参照されている YourProjectName ディレクトリを削除します。 この手順を完了する前に、コマンド プロンプトから
iisreset
コマンドを実行する必要がある場合もあります。 そうしないと、次のエラー メッセージが表示される場合があります。GeneratedName.dllを削除できません: アクセスが拒否されました。
ディスクがいっぱいまたは書き込み保護されていないこと、およびファイルが現在使用されていないことを確認します。アプリケーションの
Bin
ディレクトリ内のアセンブリを削除します。ページを実行するには、Internet Explorer を起動し、ページの URL を手動で入力します。 Visual Studio .NET IDE の [ブラウザーで ビュー または Browse With オプションを選択しないでください。 それ以外の場合、Visual Studio .NET 2003 を使用する場合、コードビハインド ページは既定で
Bin
ディレクトリにあるアセンブリにプリコンパイルされます。
Note
これらの種類の問題を回避するために Visual Studio .NET を使用してアプリケーションを開発する場合は、(
Src
属性を使用して) 必要に応じてコンパイル方法の代わりにプリコンパイル済みアプローチを使用することをお勧めします。Web フォーム ページを 1 つのファイルに含める必要がある場合は、分離コード クラス ファイルではなくコードを含むように.aspx ページを開発します。
Visual Studio .NET で単一ファイルの Web フォームを開発する方法の詳細については、 Visual Studio 2003 廃止された技術ドキュメントを参照してください。
分離コード クラス ファイルをプリコンパイルせず、
Src
属性を@ Page
ディレクティブに追加しない場合、または属性の仮想パスが正しくない場合は、次のエラー メッセージが表示されます。型 'CodeBehindSamples.SrcSample' を読み込めませんでした。
.aspx ページを展開するときに、関連付けられている分離コード クラス ファイルがプリコンパイルされる場合は、アプリケーションの
Bin
フォルダーにアセンブリを配置するだけで済みます。 アプリケーションで実際の分離コード クラス ファイルをデプロイする必要はありません。.aspx ページを展開するときに、関連する分離コード クラス ファイルがプリコンパイルされていない場合は、分離コード クラス ファイルをアプリケーションと共にデプロイする必要があります。 さらに、
Src
属性を@ Page
ディレクティブに追加する必要があります。これは、クラス ファイルが必要に応じてコンパイルされるときに使用できる必要があるためです。
関連情報
アセンブリの詳細については、「 Assemblies」を参照してください。
ASP.NET プログラミングに関連するその他の記事、サンプル、その他のリソースについては、 ASP.NETを参照してください。
@ Page ディレクティブとそのさまざまな属性の詳細については、「 @ Pageを参照してください。
一般的な Web フォーム構文の詳細については、「 Web フォームの構文」を参照してください。
詳細については、「分離コード モデルの概要 ASP.NETを参照してください。