[[Open棟梁Project>http://opentouryo.osscons.jp/]] - [[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]

* 目次 [#h9ae09b4]
#contents

*概要 [#a001a098]
ASP.NETのコンパイルには、6個のモデルがある。

-1つのJITコンパイル

-5つのプリコンパイル オプション~
ASP.NETコンパイル ツール(Aspnet_compiler.exe)

このコンパイル モデルの説明とメリット・デメリットを下記に纏める。

*コンパイル モデル [#nb2e4e68]
**既定のコンパイル(JITコンパイル) [#hcfa6a6f]
***説明 [#q09de758]
-初期要求時に、JITコンパイラによりコンパイルされる。
-アプリケーション内のファイルに変更を加えると、次回ページが要求されたとき、~
変更されたファイルに対する依存関係を判断し、影響のあるファイルのみを、再びJITコンパイルする。

以下のケースで有用。
-Webサイトを開発してテストする場合。
-静的な情報を主とするWebサイトを対象とする場合。
-頻繁な変更がないWebサイトを対象とする場合。

***メリット [#l11f457c]
-簡単に使用でき、初期応答以降は、応答速度に遅延が生じない。

***デメリット [#f3f0700d]
-初期要求時にJITコンパイラによりコンパイルされるため、初期応答速度に遅延が生じる。

-また、本番環境にソース コード ファイルを格納する必要があり、コード流出の可能性がある。
--本番環境の管理者に参照されるケース
--Webサーバのセキュリティ ホールによりプログラム コードがダウンロードされるケース
--などを想定している。

***参考 [#df92bf65]
既定で、Web アプリケーションをコンパイルすると、~
コンパイルされたコードは Temporary ASP.NET Files フォルダに配置される。

-ASP.NET の動的コンパイルの概要~
https://msdn.microsoft.com/ja-jp/library/ms366723.aspx

**埋め込み先コンパイル [#sda6e401]
-ASP.NETコンパイル ツールを「-targetDir」スイッチを指定しないで実行することにより、~
開発フォルダ内でWebアプリケーションをJITコンパイルする。

-これを本番環境に配置した後、アプリケーション内のファイルを直接変更した場合、~
次回ページが要求されたとき、変更されたファイルに対する依存関係を判断し、~
影響のあるファイルのみを、再びJITコンパイルする。

以下のケースで有用である。
-頻繁に変更されるWebサイトを対象とする場合。
-初期応答速度を短くする必要がある場合。

***メリット [#q7b809a9]
-簡単に使用でき、応答速度に遅延が生じない。
-本番環境にソース コード ファイルを格納する必要がある。

***デメリット [#b823c8da]
-また、アプリケーション内のファイルを変更した場合は、~
JITコンパイラによりコンパイルされるため、初期応答速度に遅延が生じる。


**UIを更新できるプリコンパイル [#h414e3ca]
-ASP.NETコンパイル ツールの「-u」スイッチを使用することにより、~
ソース コードのみをDLLにコンパイルし、UIコード(「*.aspx」ファイルなど)は更新できるように残すことができる。
-本番環境にWebサイトを配置した後でもWebサイト全体を再コンパイルすることなく、UIコードを変更できる。

***メリット [#ffba715f]
-簡単に使用でき、最初のページ要求時の応答時間を短くできる。
-Webサイト全体を再コンパイルすることなく、Webサイトの外観や動作を変更できる。
-プログラム コードという知的財産を保護できる。

***デメリット [#vb858edd]
-アプリケーションのすべてのUIコード(*.aspx)を本番環境に格納する必要がある。

**UIを更新できないプリコンパイル [#p8a2499a]
ASP.NETコンパイル ツールを「-u」スイッチを指定しないで実行することにより、ソース コード・UIコードをDLLにコンパイルできる。

***メリット [#r1e852b5]
-最初のページ要求時の応答時間を短くできる。
-ソース コード・UIコードという知的財産を保護できる。
-配置前にコンパイルを個別に実行する必要がある。

***デメリット [#y7cea51a]
-アプリケーションのUIに小さい変更を加えた場合でも、~
Webサイト全体を再コンパイルする必要がある。

**固定名アセンブリへのプリコンパイル [#u93c5603]
-ASP.NETコンパイル ツールのデフォルトの設定では、再コンパイルのたびアセンブリ名が変わる。~
このため、1つのアセンブリを提供するためにアプリケーション全体を再配置する必要がある。

-しかし「-fixednames」スイッチを指定して実行すると~
アプリケーションの各ページに対して1つの固定名アセンブリを作成できる。~
このため、変更したアセンブリのみ差分配置できる。

***メリット [#md8fd2cd]
-アプリケーションに対して小さい更新を行う場合、他の方法より小さな更新で済む。

***デメリット [#uc8b304f]
-アプリケーション内の各ページに対して1つのアセンブリが作成される。
-これにより、多くのページで構成されるサイトの場合、多くのアセンブリが生成される。

**署名されたアセンブリへのプリコンパイル [#k50c2a65]
ASP.NETコンパイル ツールを使用して、厳密名 付きのアセンブリを作成できる。

***メリット [#i40e61cb]
-厳密名付きのアセンブリを使用するとアセンブリを不正なコードで置換することが困難になる。
-これによって、アプリケーションのセキュリティが向上する。

***デメリット [#u3cca5c9]
-共有開発環境でのキー管理が複雑になる。
-FullTrustでないアセンブリから厳密名付きのWebサイトから厳密名付きのアセンブリを呼び出す場合、~
呼び出し先の厳密名付きのアセンブリはAllowPartiallyTrustedCallersAttribute属性を持っている必要がある。

*プリコンパイル オプションと[MSBuildオプション]の関連 [#j7c568ae]
-Visual StudioのWebサイトの[プロパティ ページ]ダイアログのリストから、~
[MSBuildオプション]を選択し、以下のチェック ボックスを変更する。

-各プリコンパイル オプションを組み合わせて利用することもで、~
「UIを更新可能な固定名・単一ページアセンブリ」というコンパイルも可能である。

**[このプリコンパイル済みサイトを更新可能にする] [#xfc2bcd5]
=UIを更新できるプリコンパイル

**[固定名および単一ページ アセンブリを使用する] [#icb71797]
=固定名アセンブリへのプリコンパイル

**[このプリコンパイル済みアセンブリで厳密な名前を有効にする] [#y0e4bd23]
=署名されたアセンブリへのプリコンパイル


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS