ソース コードは App_Code フォルダに格納できます。その場合、ソース コードは実行時に自動的にコンパイルされます。コンパイルされたアセンブリには、Web アプリケーションの他のすべてのコードがアクセスできます。そのため、App_Code フォルダは、コンパイル済みコードではなくソース コードを格納できるという点を除き、Bin フォルダと同じように機能します。ASP.NET Web アプリケーションにおいて特別なステータスが与えられている App_Code フォルダでは、カスタム クラスとその他のソース コード専用ファイルを作成でき、それらを個別にコンパイルしなくても Web アプリケーションで使用できます。
App_Code フォルダには、従来のクラス ファイルとして記述されたソース コード ファイル (.vb や .cs などの拡張子を持つファイル) を格納できます。また、プログラミング言語が明らかではないファイルも格納できます。これらのファイルには、.wsdl (Web service description language) ファイルや XML スキーマ (.xsd) ファイルなどがあります。ASP.NET は、これらのファイルをアセンブリにコンパイルできます。
App_Code フォルダには、ファイルとサブフォルダを必要な数だけ含めることができます。ソース コードは自由に編成できますが、ASP.NET は、すべてのコードを、Web アプリケーション内の他のすべてのコードがアクセスできる単一のアセンブリにコンパイルします。
メモ : |
|---|
ユーザー コントロールは App_Code フォルダに配置できません。これには、単一のユーザー コントロールと、分離コード モデルを使用するユーザー コントロールの両方が含まれます。ユーザー コントロールを App_Code ディレクトリに配置すると、ユーザー コントロールのコードが必要なシーケンス以外でもコンパイルされるため、許可されません。ユーザー コントロールを App_Code フォルダに配置する必要はありません。ユーザー コントロールはアプリケーションのどのページでも使用できます。 |
App_Code フォルダのプログラミング言語の推定
App_Code フォルダは、格納されているファイルがどのプログラミング言語で記述されているかが明示的にマークされていません。代わりに、ASP.NET は、格納されているファイルに基づいて、App_Code フォルダのために起動するコンパイラを推定します。App_Code フォルダに .vb ファイルが存在する場合、ASP.NET は Visual Basic コンパイラを使用し、また .cs ファイルが存在する場合は C# コンパイラを使用します。
.wsdl ファイルなど、プログラミング言語が判然としないファイルだけが App_Code フォルダに格納されている場合、ASP.NET は、Web アプリケーションの compilation 要素やマシン構成ファイルで設定されている、Web アプリケーションの既定のコンパイラを使用します。
App_Code フォルダでの複数のプログラミング言語
App_Code フォルダのソース コードは単一のアセンブリにコンパイルされるため、App_Code フォルダ内のすべてのファイルは共通のプログラミング言語で記述する必要があります。たとえば、App_Code フォルダには、Visual Basic と C# の両方で記述されたソース コードを格納できません。
ただし、Web アプリケーションは、App_Code フォルダの各サブフォルダを個別にコンパイルが可能な単位として取り扱うように設定できます。そのように設定すると、各サブフォルダには、それぞれ別々のプログラミング言語で記述されたソース コードを格納できます。フォルダの構成を指定するには、Web.config ファイルの compilation 要素で codeSubDirectories 要素を作成し、サブフォルダへの参照を追加します。次の例は、VBCode と CSCode という名前のサブフォルダが、それぞれ別個のアセンブリにコンパイルされるように設定する方法を示しています。
<compilation debug="false">
<codeSubDirectories>
<add directoryName="VBCode" />
<add directoryName="CSCode" />
</codeSubDirectories>
</compilation>VBCode サブフォルダと CSCode サブフォルダへの参照には、サブフォルダに格納されているプログラミング言語に関する情報を含める必要はありません。App_Code フォルダ自体と同様に、ASP.NET は、サブフォルダのファイルに基づいて使用するコンパイラを推定します。
App_Code フォルダでのセキュリティ
App_Code フォルダ内のコードに関するセキュリティ上の問題は、Bin フォルダのコードの場合と基本的に同じです。コードは、実行時にアセンブリにコンパイルされます。App_Code フォルダでは、ファイルのソース コードを読み取ることができるという点がセキュリティ上の問題を軽減する要素になりますが、コードを十分に理解していない場合は、セキュリティ上のリスクを伴う場合があります。そのため、App_Code フォルダのソース コードは、同じソースからコンパイルされたコードの場合と同じように取り扱ってください。