ASP.NET コンパイル ツール (Aspnet_compiler.exe)
更新 : 2007 年 11 月
ASP.NET コンパイル ツール (Aspnet_compiler.exe) では、ASP.NET Web アプリケーションを埋め込み先でコンパイルすることも、運用サーバーなど、目的の場所に配置するためにコンパイルすることもできます。埋め込み先コンパイルを行うと、エンド ユーザーからアプリケーションへの最初の要求に対してアプリケーションのコンパイルによる遅延が発生しないため、アプリケーションのパフォーマンスが向上します。
配置用コンパイルを実行するには 2 つの方法があります。1 つは分離コードファイルやマークアップ ファイルなど、すべてのソース ファイルを削除する方法で、もう 1 つはマークアップ ファイルを保持する方法です。
メモ : |
---|
ASP.NET コンパイル ツールは、ASP.NET バージョン 2.0 よりも前の ASP.NET のバージョンでは使用できません。 |
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 パラメータを含める必要があります。 |
-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 つの一般的な方法で使用できます。埋め込み先コンパイルと、対象出力ディレクトリが指定される配置用のコンパイルです。以降のセクションで、これらのシナリオを説明します。
アプリケーションの埋め込み先コンパイル
ASP.NET コンパイル ツールはアプリケーションを埋め込み先でコンパイルできます。つまり、アプリケーションに複数の要求が行われた場合と同等の状態を作り出し、それによって適切なコンパイルを実現します。プリコンパイル済みサイトのユーザーは、最初の要求時にページをコンパイルすることによって引き起こされる遅延に遭遇することがありません。
偽装したアカウントを使用する場合、プリコンパイルを正常に実行するには、そのアカウントとログオン ユーザー アカウントの両方がコンパイル対象に対する書き込みアクセス権を持っている必要があります。
サイトを埋め込み先でコンパイルする場合は、次の項目が適用されます。
サイトでは、そのファイルとディレクトリ構造が保持されます。
サーバーのサイトで使用される、すべてのプログラミング言語に対するコンパイラが必要です。
1 つのファイルのコンパイルが失敗すると、サイト全体のコンパイルが失敗します。
新しいソース ファイルを追加した後に、アプリケーションを埋め込み先で再コンパイルすることもできます。ツールは、-c オプションを含めない限り、新しいファイルまたは変更されたファイルのみをコンパイルします。
メモ : |
---|
入れ子になったアプリケーションを含むアプリケーションのコンパイルでは、入れ子になったアプリケーションはコンパイルされません。入れ子になったアプリケーションは、個別にコンパイルする必要があります。 |
メモ : |
---|
マスタ ページを含む Web アプリケーションを、更新可能なサイトとしてコンパイルすると、名前の競合が発生し、コンパイルは失敗します。競合は、マスタ ページの名前が、マスタ ページから派生するコンテンツ ページの名前空間の名前に一致する場合に発生します (@ Page ディレクティブの Inherits 属性によって、継承関係が確立されます)。この問題を回避するには、マスタ ページのクラス名を変更するか、名前空間の名前を変更します。または、アプリケーションを更新できないサイトとしてコンパイルすることもできます。 |
アプリケーションの配置用のコンパイル
アプリケーションを配置用にコンパイル (対象の場所にコンパイル) するには、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