ASP.NET コンパイル ツール (Aspnet_compiler.exe)
ASP.NET コンパイル ツール (Aspnet_compiler.exe) では、ASP.NET Web アプリケーションを埋め込み先でコンパイルすることも、運用サーバーなど、目的の場所に配置するためにコンパイルすることもできます。 埋め込み先コンパイルを行うと、エンド ユーザーからアプリケーションへの最初の要求に対してアプリケーションのコンパイルによる遅延が発生しないため、アプリケーションのパフォーマンスが向上します。 配置用コンパイルを実行するには 2 つの方法があります。1 つは分離コードファイルやマークアップ ファイルなど、すべてのソース ファイルを削除する方法で、もう 1 つはマークアップ ファイルを保持する方法です。
注意
適切なバージョンの Aspnet_compiler.exe を検索する方法については、このトピックで後述する「適切なバージョンの Aspnet_compiler.exe の検索」を参照してください。
aspnet_compiler [-?]
[-m metabasePath | -v virtualPath [-p physicalPath]]
[[-u] [-f] [-d] [-fixednames] targetDir]
[-c]
[-errorstack]
[-nologo]
[[-keyfile file | -keycontainer container ] [-aptca] [-delaysign]]
オプション
オプション |
説明 |
---|---|
-m metabasePath |
コンパイル対象のアプリケーションの IIS メタベースの完全パスを指定します。 IIS メタベースは、IIS を構成するために使用される階層情報ストアです。 たとえば、既定の IIS Web サイトへのメタベース パスは LM/W3SVC/1/ROOT です。 このオプションは、-v や -p オプションと組み合わせることはできません。 |
-v virtualPath |
コンパイル対象のアプリケーションの仮想パスを指定します。 -p も指定されている場合、コンパイル対象のアプリケーションを検索するために、付随する physicalPath パラメーターの値が使用されます。 それ以外の場合は IIS メタベースが使用され、ツールはソース ファイルが既定の Web サイト (LM/W3SVC/1/ROOT メタベース ノードで指定) にあると見なします。 このオプションは、-m オプションと組み合わせることはできません。 |
-p physicalPath |
コンパイルするアプリケーションを含むルート ディレクトリの、完全ネットワーク パスまたはローカル ディスク パスを指定します。 -p が指定されていない場合は、IIS メタデータを使用してディレクトリが検索されます。 このオプションは、-v オプションと組み合わせる必要があり、-m オプションと組み合わせることはできません。 |
-u |
Aspnet_compiler.exe がプリコンパイル済みアプリケーションを作成し、作成後は .aspx ページなどのコンテンツを更新できるように指定します。 このオプションを省略すると、生成されたアプリケーションにはコンパイルされたファイルのみが含まれ、配置サーバーでは更新できません。 ソース マークアップ ファイルを変更し、再コンパイルすることによってのみ、アプリケーションを更新できます。 targetDir パラメーターを含める必要があります。 このオプションを使用すると、.aspx ファイルのコード ブロック (つまり、script 要素内または <% タグと %> タグの間にあるコード) はコンパイルされません。 したがって、.aspx ファイルの完全なコンパイルは実行時まで行われず、このコード ブロックにコンパイル エラーが含まれている場合は、実行時にしかエラーを確認できません。 通常、.aspx ファイルのコード ブロックを利用するサイトでこのオプションを使用することは安全性に欠けます。 |
-f |
ツールが targetDir ディレクトリおよびそのサブディレクトリにある既存のファイルを上書きするように指定します。 |
-d |
アプリケーションのソース設定ファイルで定義されている設定をオーバーライドして、コンパイルされたアプリケーションにデバッグ情報を含めます。 デバッグ情報が存在しない場合、デバッグ出力は省略されます。 -d オプションは、埋め込み先コンパイルには使用できません。埋め込み先コンパイルには、デバッグ オプションの構成設定が適用されます。 |
targetDir |
コンパイルされたアプリケーションを置くルート ディレクトリへのネットワーク パスまたはローカル ディスク パス。 targetDir パラメーターを含めないと、アプリケーションは埋め込み先でコンパイルされます。 |
-c |
コンパイル対象のアプリケーションを完全にビルドし直すように指定します。 コンパイル済みのコンポーネントが再コンパイルされます。 このオプションを省略すると、ツールはコンパイルが最後に実行されてから変更されたアプリケーションの部分のみをビルドします。 |
-errorstack |
アプリケーションのコンパイルに失敗した場合、ツールにスタック トレース情報を含めるように指定します。 |
-keyfile file |
厳密な名前を生成するために使用される公開キーと秘密キーのペアを含むファイルの名前を示す AssemblyKeyFileAttribute が、コンパイルされるアセンブリに適用されることを指定します。 このオプションは、-aptca オプションと組み合わせる必要があります。 属性が既にコード ファイルのアセンブリに適用されている場合、Aspnet_compiler.exe は例外をスローします。 |
-keycontainer container |
厳密な名前を生成するために使用される公開キーと秘密キーのペア用のコンテナーの名前を示す AssemblyKeyNameAttribute が、コンパイルされるアセンブリに適用されることを指定します。 このオプションは、-aptca オプションと組み合わせる必要があります。 属性が既にコード ファイルのアセンブリに適用されている場合、Aspnet_compiler.exe は例外をスローします。 |
-aptca |
部分的に信頼される呼び出し元にアセンブリへのアクセスを許可する AllowPartiallyTrustedCallersAttribute が、Aspnet_compiler.exe の生成する厳密な名前の付いたアセンブリに適用されるように指定します。 このオプションは -keyfile や -keycontainer オプションと組み合わせることはできません。 属性が既にコード ファイルのアセンブリに適用されている場合、Aspnet_compiler.exe は例外をスローします。 |
-delaysign |
アセンブリが公開キーと秘密キーのペアではなく公開キー トークンでのみ署名されることを示す AssemblyDelaySignAttribute が、生成されるアセンブリに適用されることを示します。 このオプションは -keyfile や -keycontainer オプションと組み合わせることはできません。 属性が既にコード ファイルのアセンブリに適用されている場合、Aspnet_compiler.exe は例外をスローします。 -delaysign オプションを使用すると、Aspnet_compilier.exe で作成されるコードは、署名する前に実行できます。 署名を完了する前に、そのコードが悪意のあるユーザーに対して脆弱でないことを確認する必要があります。 |
-fixednames |
アプリケーションの各ページに対して 1 つのアセンブリが生成されることを指定します。 オペレーティング システムのファイル名の制限に適合する名前である限り、各アセンブリには元のページの仮想パスの名前が付けられます。この場合、アセンブリ名に対してハッシュが生成され使用されます。 -fixednames オプションは、埋め込み先コンパイルには使用できません。埋め込み先コンパイルには、コンパイル バッチ モードの構成設定が適用されます。 |
-nologo |
著作権メッセージが表示されないようにします。 |
-? |
このツールのコマンド構文とオプションを表示します。 |
解説
ASP.NET コンパイル ツールには次の 2 つのバージョンがあります。
.NET Framework 2.0 に付属するバージョン。 このバージョンは、.NET Framework 2.0 CLR に関連付けられているアプリケーション プールに配置される Web アプリケーションに使用します。 Web アプリケーションは、.NET Framework 2.0、.NET Framework 3.0、または .NET Framework 3.5 を対象にできます。
.NET Framework 4 に付属するバージョン。 このバージョンは、.NET Framework 4 CLR に関連付けられているアプリケーション プールに配置される Web アプリケーションに使用します。 Web アプリケーションは、.NET Framework 2.0、.NET Framework 3.0、.NET Framework 3.5、または .NET Framework 4 を対象にできます。.NET Framework 2.0、.NET Framework 3.0、または .NET Framework 3.5 を対象とする Web サイトに対してこのバージョンを使用すると、.NET Framework 2.0 バージョンと比較してエラー レポートが強化されます。
.NET Framework の特定のバージョンを対象とする Web サイトを開発、コンパイル、および配置する方法の詳細については、「ASP.NET Web プロジェクト用の .NET Framework のマルチ ターゲット機能」および「ASP.NET の side-by-side 実行の概要」を参照してください。 ASP.NET コンパイル ツールで Web サイトの対象 .NET Framework バージョンを特定する方法については、BuildManager.TargetFramework プロパティを参照してください。
ASP.NET コンパイル ツールは 2 つの一般的な方法で使用できます。埋め込み先コンパイルと、対象出力ディレクトリが指定される配置用のコンパイルです。 以降のセクションで、これらのシナリオを説明します。
アプリケーションの埋め込み先コンパイル
ASP.NET コンパイル ツールはアプリケーションを埋め込み先でコンパイルできます。つまり、アプリケーションに複数の要求が行われた場合と同等の状態を作り出し、それによって適切なコンパイルを実現します。 プリコンパイル済みサイトのユーザーは、最初の要求時にページをコンパイルすることによって引き起こされる遅延に遭遇することがありません。
偽装したアカウントを使用する場合、プリコンパイルを正常に実行するには、そのアカウントとログオン ユーザー アカウントの両方がコンパイル対象に対する書き込みアクセス権を持っている必要があります。
サイトを埋め込み先でコンパイルする場合は、次の項目が適用されます。
サイトでは、そのファイルとディレクトリ構造が保持されます。
サーバーのサイトで使用される、すべてのプログラミング言語に対するコンパイラが必要です。
1 つのファイルのコンパイルが失敗すると、サイト全体のコンパイルが失敗します。
新しいソース ファイルを追加した後に、アプリケーションを埋め込み先で再コンパイルすることもできます。 ツールは、-c オプションを含めない限り、新しいファイルまたは変更されたファイルのみをコンパイルします。
注意
入れ子になったアプリケーションを含むアプリケーションのコンパイルでは、入れ子になったアプリケーションはコンパイルされません。入れ子になったアプリケーションは、個別にコンパイルする必要があります。
注意
マスター ページを含む Web アプリケーションを、更新可能なサイトとしてコンパイルすると、名前の競合が発生し、コンパイルは失敗します。競合は、マスター ページの名前が、マスター ページから派生するコンテンツ ページの名前空間の名前に一致する場合に発生します (@ Page ディレクティブの Inherits 属性によって、継承関係が確立されます)。この問題を回避するには、マスター ページのクラス名を変更するか、名前空間の名前を変更します。または、アプリケーションを更新できないサイトとしてコンパイルすることもできます。
注意
.NET Framework 4 バージョンのツールを使用して Web サイトを埋め込み先でプリコンパイルした場合、サイトが旧バージョンの .NET Framework を対象とする一方で .NET Framework 2.0 CLR を対象とするアプリケーション プールに関連付けられている場合は、Web アプリケーションに対する最初の要求が行われた時点で、サイトがプリコンパイルされていない場合と同様に動的コンパイルが実行されます。これは、コマンド ライン コンパイラの場合、.NET Framework 2.0 CLR に認識されない .NET Framework 4 一時フォルダーにコンパイルされるためです。
アプリケーションの配置用のコンパイル
アプリケーションを配置用にコンパイル (対象の場所にコンパイル) するには、targetDir パラメーターを指定します。 targetDir には、Web アプリケーションの最終的な場所を指定することも、コンパイル済みアプリケーションを配置する元になる場所を指定することもできます。
-u オプションを使用すると、再コンパイルせずにコンパイル済みアプリケーションの一部のファイルを変更できる方法で、アプリケーションがコンパイルされます。 Aspnet_compiler.exe は静的な種類のファイルと動的な種類のファイルを区別し、生成されるアプリケーションを作成する際には、それぞれ異なる方法でファイルを処理します。
静的な種類のファイルは、コンパイラやビルド プロバイダーに関連付けられていない、名前に .css、.gif、.htm、.html、.jpg、.js などの拡張子が付くファイルです。 これらのファイルは、ディレクトリ構造内の相対的な位置を保ったまま、対象の場所にそのままコピーされます。
動的な種類のファイルは、コンパイラやビルド プロバイダーが関連付けられている、.asax、.ascx、.ashx、.aspx、.browser、.master などの ASP.NET 固有のファイル名拡張子の付いたファイルが含まれます。 ASP.NET コンパイル ツールは、これらのファイルからアセンブリを生成します。 -u オプションを省略すると、ツールはファイル名拡張子 .COMPILED のファイルも作成します。このファイルは、元のソース ファイルからそのアセンブリへの割り当てを示します。 アプリケーション ソースのディレクトリ構造を確実に保持するために、ツールは対象アプリケーションの対応する場所にプレースホルダー ファイルを生成します。
-u オプションを使用して、コンパイルしたアプリケーションのコンテンツを変更できることを示す必要があります。 そうしない場合、その後の変更は無視されるか、実行時エラーの原因となります。
-u オプションを指定したときに、ASP.NET コンパイル ツールでそれぞれの種類のファイルがどのように処理されるのかを次の表に示します。
ファイルの種類 |
コンパイラの処理 |
---|---|
.ascx、.aspx、.master |
これらのファイルはマークアップとソース コードに分けられ、この種類には分離コード ファイルが含まれます。 ソース コードは、ハッシュ アルゴリズムから派生する名前でアセンブリにコンパイルされ、アセンブリは Bin ディレクトリに配置されます。 すべてのインライン コード (<script runat="server"> 要素で囲まれるコード) はマークアップを含み、コンパイルされません。 ソース ファイルと同じ名前の新しいファイルが作成され、マークアップが追加され、対応する出力ディレクトリに配置されます。 |
.ashx、.asmx |
これらのファイルはコンパイルされず、出力ディレクトリにそのまま移動され、コンパイルされません。 ハンドラー コードをコンパイルするには、コードを App_Code ディレクトリのソース コード ファイルに配置します。 |
.cs、.vb、.jsl、.cpp (前に一覧で示した種類のファイルに対する分離コード ファイルは含まれません) |
これらのファイルはコンパイルされ、これらのファイルを参照するアセンブリにリソースとして含まれます。 ソース ファイルは、出力ディレクトリにコピーされません。 コード ファイルが参照されないと、コンパイルされません。 |
カスタムの種類のファイル |
これらのファイルはコンパイルされません。 これらのファイルは、対応する出力ディレクトリにコピーされます。 |
App_Code サブディレクトリのソース コード ファイル |
これらのファイルはアセンブリにコンパイルされ、Bin ディレクトリに配置されます。
メモ
App_Code ディレクトリにある静的な種類のファイルは、出力ディレクトリにコピーされません。
|
App_GlobalResources サブディレクトリの .resx および .resource ファイル |
これらのファイルはアセンブリにコンパイルされ、Bin ディレクトリに配置されます。 App_GlobalResources サブディレクトリはメイン出力ディレクトリに作成され、ソース ディレクトリにある .resx または .resources ファイルは出力ディレクトリにコピーされません。
メモ
App_GlobalResources サブディレクトリのリソース ファイルは、App_Code サブディレクトリのコードがコンパイルされる前に、アセンブリにコンパイルされます。コンパイル後のリソース ファイルの変更はサポートされません。
|
App_LocalResources サブディレクトリの .resx および .resource ファイル |
これらのファイルはコンパイルされず、対応する出力ディレクトリにコピーされます。 |
App_Themes サブディレクトリの .skin ファイル |
.skin ファイルと静的テーマ ファイルはコンパイルされず、対応する出力ディレクトリにコピーされます。 |
.browser Web.config 静的な種類のファイル 既に Bin ディレクトリに存在するアセンブリ |
これらのファイルは、出力ディレクトリにそのままコピーされます。 |
-u オプションを省略したときに、ASP.NET コンパイル ツールでそれぞれの種類のファイルがどのように処理されるのかを次の表に示します。
注意
コンパイル済みアプリケーションのソース コピーが変更されることを防ぐための警告は表示されません。
ファイルの種類 |
コンパイラの処理 |
---|---|
.aspx、.asmx、.ashx、.master |
これらのファイルはマークアップとソース コードに分けられます。ソース コードは、分離コード ファイルと、<script runat="server"> 要素内に含まれるすべてのコードを含みます。 ソース コードは、ハッシュ アルゴリズムから派生する名前でアセンブリにコンパイルされます。 生成されたアセンブリは Bin ディレクトリに配置されます。 すべてのインライン コード (<% および %> で囲まれるコード) はマークアップを含み、コンパイルされません。 コンパイラは、ソース ファイルと同じ名前のマークアップを格納するための新しいファイルを作成します。 これらの生成されたファイルは、Bin ディレクトリに配置されます。 コンパイラは、ソース ファイルと同じ名前で拡張子 .COMPILED の付いた、マップ情報を含むファイルも作成します。 .COMPILED ファイルは、ソース ファイルの元の場所に対応する出力ディレクトリに配置されます。 |
.ascx |
これらのファイルは、マークアップとソース コードに分割されます。 ソース コードは、ハッシュ アルゴリズムから派生する名前でアセンブリにコンパイルされ、Bin ディレクトリに配置されます。 マークアップ ファイルは生成されません。 |
.cs、.vb、.jsl、.cpp (前に一覧で示した種類のファイルに対する分離コード ファイルは含まれません) |
.ascx、.ashx、または .aspx ファイルから生成されたアセンブリで参照されるソース コードはアセンブリにコンパイルされ、Bin ディレクトリに配置されます。 ソース ファイルはコピーされません。 |
カスタムの種類のファイル |
これらのファイルは、動的ファイルのようにコンパイルされます。 基になるファイルの型に従って、コンパイラは割り当てられたファイルを出力ディレクトリに配置できます。 |
App_Code サブディレクトリのファイル |
このサブディレクトリのソース コード ファイルはアセンブリにコンパイルされ、Bin ディレクトリに配置されます。
メモ
App_Code ディレクトリにある静的な種類のファイルは、出力ディレクトリにコピーされません。
|
App_GlobalResources サブディレクトリのファイル |
これらのファイルはアセンブリにコンパイルされ、Bin ディレクトリに配置されます。 App_GlobalResources サブディレクトリは、メイン出力ディレクトリに作成されません。 設定ファイルで appliesTo="All" が指定されている場合、.resx および .resources ファイルは出力ディレクトリにコピーされます。 BuildProvider で参照される場合、これらのファイルはコピーされません。 |
App_LocalResources サブディレクトリの .resx および .resource ファイル |
これらのファイルは一意の名前でアセンブリにコンパイルされ、Bin ディレクトリに配置されます。 .resx または .resource ファイルは、出力ディレクトリにコピーされません。 |
App_Themes サブディレクトリの .skin ファイル |
テーマはアセンブリにコンパイルされ、Bin ディレクトリに配置されます。 .skin ファイルに対してスタブ ファイルが作成され、対応する出力ディレクトリに配置されます。 静的ファイル (.css など) は、出力ディレクトリにコピーされます。 |
.browser Web.config 静的な種類のファイル 既に Bin ディレクトリに存在するアセンブリ |
これらのファイルは、出力ディレクトリにそのままコピーされます。 |
固定アセンブリ名
MSI Windows インストーラーを使用して Web アプリケーションを配置するなどの一部のシナリオでは、更新用のアセンブリや構成設定を識別するために、一貫したディレクトリ構造だけでなく、一貫したファイル名とコンテンツを使用する必要があります。 このような場合、-fixednames オプションを使用することにより、ASP.NET コンパイル ツールで複数のページをアセンブリにコンパイルするのではなく、ソース ファイルごとに 1 つのアセンブリをコンパイルするように指定できます。 これによって多数のアセンブリがコンパイルされる可能性があるため、スケーラビリティを重視する場合、このオプションは慎重に使用してください。
厳密な名前のコンパイル
Aspnet_compiler.exe で Sn.exe (厳密名ツール) を個別に使用しなくても厳密な名前のアセンブリを作成できるように、-aptca、-delaysign、-keycontainer、および -keyfile オプションが用意されています。 これらのオプションは、それぞれ、AllowPartiallyTrustedCallersAttribute、AssemblyDelaySignAttribute、AssemblyKeyNameAttribute、および AssemblyKeyFileAttribute に対応しています。 各オプションに対応する属性がコンパイル対象のアセンブリに適用され、AllowMultiple プロパティが false に設定されている属性には AttributeUsageAttribute のマークが付けられます。そのため、既にこれらの属性のいずれかのマークが付けられているソース コードでこれらのキーを使用すると、コンパイルが失敗します。
関連する ASP.NET クラス
System.Web.Compilation 名前空間のいくつかのクラスを使用すると、コードは IIS 環境の外で Aspnet_compiler.exe にアクセスしたり呼び出したりできます。 ClientBuildManager クラスには、アプリケーションをコンパイルする PrecompileApplication メソッドが用意されています。 また、ClientBuildManager クラスを ClientBuildManagerParameter クラスと共に使用すると、このツールで使用しているオプションに対応する PrecompilationFlags を指定でき、同様に、厳密な名前キーを指定できます。
例
次のコマンドは、WebApplication1 アプリケーションを埋め込み先でコンパイルします。
Aspnet_compiler -v /WebApplication1
次のコマンドは、WebApplication1 アプリケーションを埋め込み先でコンパイルし、エラーを報告する必要がある場合は、ツールがスタック トレース情報を追加します。
Aspnet_compiler -v /WebApplication1 -errorstack
次のコマンドは、物理ディレクトリ パスを使用して、WebApplication1 アプリケーションを配置用にコンパイルします。 また、2 つの属性を出力アセンブリに追加します。 -keyfile オプションを使用して AssemblyKeyFileAttribute 属性を追加することにより、Key.sn ファイルに、生成されるアセンブリに厳密な名前を付けるためにツールが使用する公開キーと秘密キーのペア情報を含むことを指定します。 また、-aptca オプションを使用して、生成されるアセンブリに AllowPartiallyTrustedCallersAttribute 属性を追加します。 コンパイルされた Web アプリケーションは、c:\applicationTarget ディレクトリ内に作成されます。
Aspnet_compiler -v /WebApplication1 -p "c:\Documents and Settings\Default\My Documents\MyWebApplications\WebApplication1" -keyfile "c:\Documents and Settings\Default\My Documents\Key.sn" -aptca c:\applicationTarget
次のコマンドは、WebService2 サービスを既定のメタベース パス下にコンパイルし、SampleWebService ターゲット ディレクトリをコンパイルしたアプリケーションで上書きします。
Aspnet_compiler -m /LM/W3SVC/1/ROOT/WebService2 -f c:\InetPub\wwwroot\SampleWebService
適切なバージョンの Aspnet_compiler.exe の検索
Aspnet_compiler.exe ツールは、Microsoft.NET Framework ディレクトリにインストールされます。 コンピューターで複数のバージョンの .NET Framework を side-by-side で実行している場合は、複数のバージョンのツールがインストールされると考えられます。 次の表に、さまざまなバージョンの .NET Framework でツールがインストールされる場所を示します。
.NET Framework のバージョン |
Aspnet_compiler.exe ファイルの場所 |
---|---|
.NET Framework Version 2.0、Version 3.0、および Version 3.5 (32 ビット システム) |
%windir%\Microsoft.NET\Framework\v2.0.50727 |
.NET Framework Version 2.0、Version 3.0、および Version 3.5 (64 ビット システム) |
%windir%\Microsoft.NET\Framework64\v2.0.50727 |
.NET Framework Version 4 (32 ビット システム) |
%windir%\Microsoft.NET\Framework\v4.0.30319 |
.NET Framework Version 4 (64 ビット システム) |
%windir%\Microsoft.NET\Framework64\v4.0.30319 |
参照
参照
AllowPartiallyTrustedCallersAttribute
ASP.NET IIS 登録ツール (Aspnet_regiis.exe)
概念
ASP.NET Web プロジェクト用の .NET Framework のマルチ ターゲット機能