「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>.NET開発]] * 目次 [#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] =署名されたアセンブリへのプリコンパイル ---- Tags: [[:.NET開発]], [[:デプロイ]]