次の方法で共有


ASP.NET Web サイト内の共有コード フォルダ

更新 : 2007 年 11 月

ページ間で共有するコードが Web アプリケーションに含まれている場合は、Web アプリケーションのルートの下にある 2 つの特殊フォルダ (Bin フォルダおよび App_Code フォルダ) のいずれかでコードを保持できます。これらのフォルダを作成し、特定の種類のファイルをそのフォルダに格納する場合、ASP.NET はそのファイルを特殊な方法で処理します。

Bin フォルダ

コンパイル済みアセンブリは Bin フォルダに格納できます。その場合、ページ用のコードなど、Web アプリケーションに含まれる他のコードはいずれもコンパイル済みアセンブリを自動的に参照します。このフォルダには、カスタム クラス用のコンパイル済みコードを格納するのが一般的です。Web アプリケーションの Bin フォルダにコンパイル済みアセンブリをコピーすると、クラスがすべてのページで利用できるようになります。

Bin フォルダのアセンブリは登録する必要がありません。Bin フォルダに .dll ファイルが存在するだけで、ASP.NET は認識できます。.dll ファイルを変更し、その新しいバージョンを Bin フォルダに書き込むと、ASP.NET は更新を検出し、以後の新しいページ要求で、.dll の新しいバージョンを使用します。

Bin フォルダでのセキュリティ

コンパイル済みアセンブリを Bin フォルダに配置することは、セキュリティ上のリスクを伴う場合があります。コードを自分で記述してコンパイルした場合は、コードの機能がわかりますが、ただし、Bin フォルダのコンパイル済みコードは、実行可能コードと同じように取り扱う必要があります。コンパイル済みコードは、テストを完了し、その機能を確実に理解するまでは取り扱いに十分注意してください。

コンパイル済みコードを Bin フォルダに配置するときは、セキュリティに関する以下の点に注意してください。

  • Bin フォルダ内のアセンブリは、現在のアプリケーションにスコープが設定されます。そのため、そのアセンブリは、現在の Web アプリケーションの外部のリソースにアクセスしたり、コードを呼び出したりできません。

  • 実行時に、アセンブリのアクセス レベルは、ローカル コンピュータで指定された信頼レベルに従って設定されます。詳細については、「ASP.NET 信頼レベルとポリシー ファイル」を参照してください。

  • Visual Studio などのデザイナで作業する場合、Bin フォルダのコードは、実行時とは異なるコンテキストで動作します。たとえば、完全な信頼を与えられて動作することがあります。

App_Code フォルダ

ソース コードは 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 アプリケーション内の他のすべてのコードがアクセスできる単一のアセンブリにコンパイルします。

t990ks23.alert_note(ja-jp,VS.90).gifメモ :

ユーザー コントロールは 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 フォルダのソース コードは、同じソースからコンパイルされたコードの場合と同じように取り扱ってください。

参照

概念

ASP.NET Web サイトのレイアウト