ターゲットとタスクを構成する
開発用コンピューターでターゲット環境がサポートされている場合は、選択した MSBuild タスクを対象の環境で実行するように設定できます。 たとえば、64 ビット Windows コンピューターを使用し、32 ビット Windows アーキテクチャをターゲットとするアプリケーションを構築するとき、一部のタスクが 32 ビット プロセスで実行されます。
注意
ビルド タスクが Visual C# や Visual Basic のような .NET 言語で記述されており、ネイティブのリソースまたはツールを使用しない場合、調整なしで、あらゆるターゲット コンテンツで実行されます。
UsingTask 属性とタスク パラメーター
次の UsingTask
属性は、特定のビルド プロセスで、あるタスクのすべての操作に影響を与えます。
Runtime
属性は、それが存在する場合、共通言語ランタイム (CLR) バージョンを設定し、値としてCLR2
、CLR4
、CurrentRuntime
、*
(任意のランタイム) のいずれかを取得します。Architecture
属性は、それが存在する場合、プラットフォームとビット数を設定し、値としてx86
、x64
、CurrentArchitecture
、*
(任意のアーキテクチャ) のいずれかを取得します。TaskFactory
属性は、それが存在する場合、タスク インスタンスを作成して実行するタスク ファクトリを設定し、値としてTaskHostFactory
のみを取得します。 詳細については、このドキュメントで後述する「タスク ファクトリ」を参照してください。
<UsingTask TaskName="SimpleTask"
Runtime="CLR2"
Architecture="x86"
AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v3.5.dll" />
MSBuildRuntime
パラメーターと MSBuildArchitecture
パラメーターを利用して、個々のタスク呼び出しのターゲット コンテキストを設定することもできます。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="MyTarget">
<SimpleTask MSBuildRuntime="CLR2" MSBuildArchitecture= "x86"/>
</Target>
</Project>
MSBuild はタスクを実行する前に、一致する (ターゲット コンテキストが同じ) UsingTask
を探します。 UsingTask
で指定されているが、該当するタスクにないパラメーターは一致すると見なされます。 タスクで指定されているが、該当する UsingTask
にないパラメーターも一致すると見なされます。 パラメーター値が UsingTask
にもタスクにも指定されていない場合、値は既定として *
(任意のパラメーター) になります。
警告
複数の UsingTask
が存在し、すべてに一致する TaskName
、Runtime
、Architecture
属性がある場合、最初に評価されたものが他に取って代わります。 これは、Property
および Target
とは異なる動作です。
パラメーターがタスクに設定されていると、MSBuild は、それらのパラメーターに一致するか、少なくともそれらと競合しない UsingTask
を探します。 複数の UsingTask
が同じタスクのターゲット コンテキストを指定できます。 たとえば、異なるターゲット環境のために異なる実行可能ファイルが与えられているタスクは次のようになります。
<UsingTask TaskName="MyTool"
Runtime="CLR2"
Architecture="x86"
AssemblyFile="$(MyToolsPath)\MyTool.v2.0.dll" />
<UsingTask TaskName="MyTool"
Runtime="CLR4"
Architecture="x86"
AssemblyFile="$(MyToolsPath)\MyTool.4.0.dll" />
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="MyTarget">
<MyTool MSBuildRuntime="CLR2" MSBuildArchitecture= "x86"/>
</Target>
</Project>
既定の UsingTasks のオーバーライド
既定では、MSBuild は UsingTask を "最初のものが優先" として処理します。17.2 以降、MSBuild では、Override
パラメーターを使用してこの動作をオーバーライドできます。 パラメーター Override
が true
に設定されている UsingTask は、同じ TaskName の他の UsingTask よりも優先されます。
<UsingTask TaskName="MyTool"
Runtime="CLR4"
Architecture="x86"
Override="true"
AssemblyFile="$(MyToolsPath)\MyTool.4.0.dll" />
警告
これは、タスクごとに 1 回だけ実行できます。 同じタスクに対して複数のオーバーライドを追加しようとするビルドでは、MSBuild エラー MSB4275
が発生します。
タスク ファクトリ
MSBuild はタスクを実行する前に、現在のソフトウェア コンテキストで実行するように指定されているかどうかを確認します。 タスクがそのように指定されている場合は、MSBuild により、現在のプロセスで実行する AssemblyTaskFactory
に渡されます。それ以外の場合、MSBuild により、ターゲット コンテキストに一致するプロセスでタスクを実行する TaskHostFactory
にタスクが渡されます。 現在のコンテキストとターゲット コンテキストが一致する場合でも、TaskFactory
を TaskHostFactory
に設定することで、プロセスの外でタスクを実行するように強制できます (隔離、セキュリティ、またはその他の理由から)。
<UsingTask TaskName="MisbehavingTask"
TaskFactory="TaskHostFactory"
AssemblyFile="$(MSBuildToolsPath)\MyTasks.dll">
</UsingTask>
TaskHostFactory
が明示的に指定されている場合、タスクを実行するプロセスの有効期間が短くなります。 これにより、オペレーティング システムは、タスクの実行直後にタスクに関連するすべてのリソースをクリーンアップできます。 このため、ビルド後にタスク アセンブリを更新するときにファイル使用中エラーが発生しないよう、使用時に同じビルド プロセスに組み込まれているタスクを参照するときは、TaskHostFactory
を指定してください。
ファントム タスク パラメーター
他のタスク パラメーターと同様に、MSBuildRuntime
と MSBuildArchitecture
はビルド プロパティから設定できます。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<FrameworkVersion>3.0</FrameworkVersion>
</PropertyGroup>
<Target Name="MyTarget">
<SimpleTask MSBuildRuntime="$(FrameworkVerion)" MSBuildArchitecture= "x86"/>
</Target>
</Project>
他のタスク パラメーターとは異なり、MSBuildRuntime
と MSBuildArchitecture
はタスク自体に対しては明白ではありません。 実行しているコンテキストを認識するタスクを作成するには、.NET Framework を呼び出してコンテキストをテストするか、またはビルド プロパティを使って他のタスク パラメーターからコンテキスト情報を渡す必要があります。
Note
UsingTask
属性は、ツールセットと環境のプロパティから設定できます。
MSBuildRuntime
および MSBuildArchitecture
パラメーターは、ターゲット コンテキストを設定する最も柔軟な方法を提供しますが、範囲も最も制限されています。 柔軟性の点では、これらはタスク インスタンス自体で設定され、タスクの実行直前まで評価されないため、評価時とビルド時の両方で使用できるプロパティの完全なスコープからその値を派生できます。 制限については、これらのパラメーターは、特定のターゲットのタスクの特定のインスタンスにのみ適用されます。
Note
タスク パラメーターは、タスク ホストのコンテキストではなく、親ノードのコンテキストで評価されます。 ランタイムまたはアーキテクチャに依存する環境変数は (Program Files の場所など)、親ノードに一致する値に評価されます。 一方、同じ環境変数がタスクによって直接読み取られた場合は、タスク ホストのコンテキストで正しく評価されます。
関連するコンテンツ
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示