方法 : ターゲットとタスクを構成するHow to: Configure Targets and Tasks

一部の MSBuild タスクは、開発コンピューターの環境に関係なく、それがターゲットとする環境で実行されるように設定できます。Selected MSBuild tasks can be set to run in the environment they target, regardless of the environment of the development computer. たとえば、64 ビット コンピューターを使用し、32 ビット アーキテクチャをターゲットとするアプリケーションを構築するとき、一部のタスクが 32 ビット プロセスで実行されます。For example, when you use a 64-bit computer to build an application that targets a 32-bit architecture, selected tasks are run in a 32-bit process.

注意

ビルド タスクが Visual C# や Visual Basic のような .NET 言語で記述されており、ネイティブのリソースまたはツールを使用しない場合、調整なしで、あらゆるターゲット コンテンツで実行されます。If a build task is written in a .NET language, such as Visual C# or Visual Basic, and does not use native resources or tools, then it will run in any target context without adaptation.

UsingTask 属性とタスク パラメーターUsingTask Attributes and Task Parameters

次の UsingTask 属性は、特定のビルド プロセスで、あるタスクのすべての操作に影響を与えます。The following UsingTask attributes affect all operations of a task in a particular build process:

  • Runtime 属性は、それが存在する場合、共通言語ランタイム (CLR) バージョンを設定し、値として CLR2CLR4CurrentRuntime* (任意のランタイム) のいずれかを取得します。The Runtime attribute, if present, sets the common language runtime (CLR) version, and can take any one of these values: CLR2, CLR4, CurrentRuntime, or * (any runtime).

  • Architecture 属性は、それが存在する場合、プラットフォームとビット数を設定し、値として x86x64CurrentArchitecture* (任意のアーキテクチャ) のいずれかを取得します。The Architecture attribute, if present, sets the platform and bitness, and can take any one of these values: x86, x64, CurrentArchitecture, or * (any architecture).

  • TaskFactory 属性は、それが存在する場合、タスク インスタンスを作成して実行するタスク ファクトリを設定し、値として TaskHostFactory のみを取得します。The TaskFactory attribute, if present, sets the task factory that creates and runs the task instance, and takes only the value TaskHostFactory. 詳細については、このドキュメントで後述する「タスク ファクトリ」を参照してください。For more information, see the Task Factories section later in this document.

<UsingTask TaskName="SimpleTask"   
   Runtime="CLR2"  
   Architecture="x86"  
   AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v3.5.dll" />  

MSBuildRuntime パラメーターと MSBuildArchitecture パラメーターを利用し、個々のタスクのターゲット コンテキストを設定することもできます。You can also use the MSBuildRuntime and MSBuildArchitecture parameters to set the target context of an individual task.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
   <Target Name="MyTarget">  
      <SimpleTask MSBuildRuntime="CLR2" MSBuildArchitecture= "x86"/>  
   </Target>  
</Project>  

MSBuild はタスクを実行する前に、一致する (ターゲット コンテキストが同じ) UsingTask を探します。Before MSBuild runs a task, it looks for a matching UsingTask that has the same target context. UsingTask で指定されているが、該当するタスクにないパラメーターは一致すると見なされます。Parameters that are specified in the UsingTask but not in the corresponding task are considered to be matched. タスクで指定されているが、該当する UsingTask にないパラメーターも一致すると見なされます。Parameters that specified in the task but not in the corresponding UsingTask are also considered to be matched. パラメーター値が UsingTask にもタスクにも指定されていない場合、値は既定として * (任意のパラメーター) になります。If parameter values are not specified in either the UsingTask or the task, the values default to * (any parameter).

警告

複数の UsingTask が存在し、すべてに一致する TaskNameRuntimeArchitecture 属性がある場合、最後に評価されたものが他に取って代わります。If more than one UsingTask exists and all have matching TaskName, Runtime, and Architecture attributes, the last one to be evaluated replaces the others.

パラメーターがタスクに設定されていると、MSBuild は、それらのパラメーターに一致するか、少なくともそれらと競合しない UsingTask を探します。If parameters are set on the task, MSBuild attempts to find a UsingTask that matches these parameters or, at least, is not in conflict with them. 複数の UsingTask が同じタスクのターゲット コンテキストを指定できます。More than one UsingTask can specify the target context of the same task. たとえば、異なるターゲット環境のために異なる実行可能ファイルが与えられているタスクは次のようになります。For example, a task that has different executables for different target environments might resemble this one:

<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>  

タスク ファクトリTask Factories

MSBuild はタスクを実行する前に、現在のソフトウェア コンテキストで実行するように指定されているかどうかを確認します。Before it runs a task, MSBuild checks to see whether it is designated to run in the current software context. タスクがそのように指定されている場合、MSBuild は AssemblyTaskFactory にタスクを渡します。AssemblyTaskFactory はタスクを現在のプロセスで実行します。現在のプロセスで実行するように指定されていない場合、MSBuild は TaskHostFactory にタスクを渡します。TaskHostFactory は、ターゲット コンテキストに一致するプロセスでタスクを実行します。If the task is so designated, MSBuild passes it to the AssemblyTaskFactory, which runs it in the current process; otherwise, MSBuild passes the task to the TaskHostFactory, which runs the task in a process that matches the target context. 現在のコンテキストとターゲット コンテキストが一致する場合でも、TaskFactoryTaskHostFactory に設定することで、プロセスの外でタスクを実行するように強制できます (隔離、セキュリティ、またはその他の理由から)。Even if the current context and the target context match, you can force a task to run out-of-process (for isolation, security, or other reasons) by setting TaskFactory to TaskHostFactory.

<UsingTask TaskName="MisbehavingTask"   
   TaskFactory="TaskHostFactory"  
   AssemblyFile="$(MSBuildToolsPath)\MyTasks.dll">  
</UsingTask>  

ファントム タスク パラメーターPhantom Task Parameters

他のタスク パラメーターと同様に、MSBuildRuntimeMSBuildArchitecture はビルド プロパティから設定できます。Like any other task parameters, MSBuildRuntime and MSBuildArchitecture can be set from build properties.

<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>  

他のタスク パラメーターとは異なり、MSBuildRuntimeMSBuildArchitecture はタスク自体に対しては明白ではありません。Unlike other task parameters, MSBuildRuntime and MSBuildArchitecture are not apparent to the task itself. 実行しているコンテキストを認識するタスクを作成するには、.NET Framework を呼び出してコンテキストをテストするか、またはビルド プロパティを使って他のタスク パラメーターからコンテキスト情報を渡す必要があります。To write a task that is aware of the context in which it runs, you must either test the context by calling the .NET Framework, or use build properties to pass the context information through other task parameters.

注意

UsingTask 属性は、ツールセットと環境のプロパティから設定できます。UsingTask attributes can be set from toolset and environment properties.

MSBuildRuntime および MSBuildArchitecture パラメーターは、ターゲット コンテキストを設定する最も柔軟な方法を提供しますが、範囲も最も制限されています。The MSBuildRuntime and MSBuildArchitecture parameters provide the most flexible way to set the target context, but also the most limited in scope. 柔軟性の点では、これらはタスク インスタンス自体で設定され、タスクの実行直前まで評価されないため、評価時とビルド時の両方で使用できるプロパティの完全なスコープからその値を派生できます。On the one hand, because they are set on the task instance itself and are not evaluated until the task is about to run, they can derive their value from the full scope of properties available at both evaluation-time and build-time. 制限については、これらのパラメーターは、特定のターゲットのタスクの特定のインスタンスにのみ適用されます。On the other hand, these parameters only apply to a particular instance of a task in a particular target.

注意

タスク パラメーターは、タスク ホストのコンテキストではなく、親ノードのコンテキストで評価されます。ランタイムまたはアーキテクチャに依存する環境変数は (プログラム ファイルの場所など)、親ノードに一致する値として評価されます。Task parameters are evaluated in the context of the parent node, not in the context of the task host.Environment variables that are runtime- or architecture- dependent (such as the Program files location) will evaluate to the value that matches the parent node. 一方、同じ環境変数がタスクによって直接読み取られた場合は、タスク ホストのコンテキストで正しく評価されます。However, if the same environment variable is read directly by the task, it will correctly be evaluated in the context of the task host.

関連項目See Also

ターゲットとタスクの構成Configuring Targets and Tasks