Open棟梁Project - マイクロソフト系技術情報 Wiki
目次 †
概要 †
ASP.NETのコンパイルには、6個のモデルがある。
- 5つのプリコンパイル オプション
ASP.NETコンパイル ツール(Aspnet_compiler.exe)
このコンパイル モデルの説明とメリット・デメリットを下記に纏める。
コンパイル モデル †
既定のコンパイル(JITコンパイル) †
説明 †
- 初期要求時に、JITコンパイラによりコンパイルされる。
- アプリケーション内のファイルに変更を加えると、次回ページが要求されたとき、
変更されたファイルに対する依存関係を判断し、影響のあるファイルのみを、再びJITコンパイルする。
以下のケースで有用。
- Webサイトを開発してテストする場合。
- 静的な情報を主とするWebサイトを対象とする場合。
- 頻繁な変更がないWebサイトを対象とする場合。
メリット †
- 簡単に使用でき、初期応答以降は、応答速度に遅延が生じない。
デメリット †
- 初期要求時にJITコンパイラによりコンパイルされるため、初期応答速度に遅延が生じる。
- また、本番環境にソース コード ファイルを格納する必要があり、コード流出の可能性がある。
- 本番環境の管理者に参照されるケース
- Webサーバのセキュリティ ホールによりプログラム コードがダウンロードされるケース
- などを想定している。
埋め込み先コンパイル †
- ASP.NETコンパイル ツールを「-targetDir」スイッチを指定しないで実行することにより、
開発フォルダ内でWebアプリケーションをJITコンパイルする。
- これを本番環境に配置した後、アプリケーション内のファイルを直接変更した場合、
次回ページが要求されたとき、変更されたファイルに対する依存関係を判断し、
影響のあるファイルのみを、再びJITコンパイルする。
以下のケースで有用である。
- 頻繁に変更されるWebサイトを対象とする場合。
- 初期応答速度を短くする必要がある場合。
メリット †
- 簡単に使用でき、応答速度に遅延が生じない。
- 本番環境にソース コード ファイルを格納する必要がある。
デメリット †
- また、アプリケーション内のファイルを変更した場合は、
JITコンパイラによりコンパイルされるため、初期応答速度に遅延が生じる。
UIを更新できるプリコンパイル †
- ASP.NETコンパイル ツールの「-u」スイッチを使用することにより、
ソース コードのみをDLLにコンパイルし、UIコード(「*.aspx」ファイルなど)は更新できるように残すことができる。
- 本番環境にWebサイトを配置した後でもWebサイト全体を再コンパイルすることなく、UIコードを変更できる。
メリット †
- 簡単に使用でき、最初のページ要求時の応答時間を短くできる。
- Webサイト全体を再コンパイルすることなく、Webサイトの外観や動作を変更できる。
- プログラム コードという知的財産を保護できる。
デメリット †
- アプリケーションのすべてのUIコード(*.aspx)を本番環境に格納する必要がある。
UIを更新できないプリコンパイル †
ASP.NETコンパイル ツールを「-u」スイッチを指定しないで実行することにより、ソース コード・UIコードをDLLにコンパイルできる。
メリット †
- 最初のページ要求時の応答時間を短くできる。
- ソース コード・UIコードという知的財産を保護できる。
- 配置前にコンパイルを個別に実行する必要がある。
デメリット †
- アプリケーションのUIに小さい変更を加えた場合でも、
Webサイト全体を再コンパイルする必要がある。
固定名アセンブリへのプリコンパイル †
- ASP.NETコンパイル ツールのデフォルトの設定では、再コンパイルのたびアセンブリ名が変わる。
このため、1つのアセンブリを提供するためにアプリケーション全体を再配置する必要がある。
- しかし「-fixednames」スイッチを指定して実行すると
アプリケーションの各ページに対して1つの固定名アセンブリを作成できる。
このため、変更したアセンブリのみ差分配置できる。
メリット †
- アプリケーションに対して小さい更新を行う場合、他の方法より小さな更新で済む。
デメリット †
- アプリケーション内の各ページに対して1つのアセンブリが作成される。
- これにより、多くのページで構成されるサイトの場合、多くのアセンブリが生成される。
署名されたアセンブリへのプリコンパイル †
ASP.NETコンパイル ツールを使用して、厳密名 付きのアセンブリを作成できる。
メリット †
- 厳密名付きのアセンブリを使用するとアセンブリを不正なコードで置換することが困難になる。
- これによって、アプリケーションのセキュリティが向上する。
デメリット †
- 共有開発環境でのキー管理が複雑になる。
- FullTrust?でないアセンブリから厳密名付きのWebサイトから厳密名付きのアセンブリを呼び出す場合、
呼び出し先の厳密名付きのアセンブリはAllowPartiallyTrustedCallersAttribute?属性を持っている必要がある。
プリコンパイル オプションと[MSBuildオプション]の関連 †
- Visual StudioのWebサイトの[プロパティ ページ]ダイアログのリストから、
[MSBuildオプション]を選択し、以下のチェック ボックスを変更する。
- 各プリコンパイル オプションを組み合わせて利用することもで、
「UIを更新可能な固定名・単一ページアセンブリ」というコンパイルも可能である。
[このプリコンパイル済みサイトを更新可能にする] †
=UIを更新できるプリコンパイル
[固定名および単一ページ アセンブリを使用する] †
=固定名アセンブリへのプリコンパイル
[このプリコンパイル済みアセンブリで厳密な名前を有効にする] †
=署名されたアセンブリへのプリコンパイル