如何;配置目标和任务

无论它们面向开发计算机的环境,选定的 MSBuild 任务在环境中可以设置运行,。 例如,那么,当您使用的是 64 位计算机生成面向 32 位体系结构的应用程序时,选定的任务在 32 位进程中运行。

备注

如果生成任务在一种 .NET 语言编写,如 Visual C# 或 Visual Basic 和不使用本机资源或工具,则在所有目标环境中运行,而无需调整。

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="https://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 属性,要计算的最后一个替换其他。

如果参数在与这些参数的任务设置, 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="https://schemas.microsoft.com/developer/msbuild/2003">
   <Target Name="MyTarget">
      <MyTool MSBuildRuntime="CLR2" MSBuildArchitecture= "x86"/>
   </Target>
</Project>

任务工厂

在运行任务之前, MSBuild 检查是否已选中 " 软件当前上下文中运行。 如果任务很为,则 MSBuild 将其传递给 AssemblyTaskFactory,运行它在当前操作;否则, MSBuild 通过任务 TaskHostFactory,运行进程的任务与目标上下文。 即使当前上下文和目标上下文匹配,可以强制任务运行通过设置 TaskFactory 进程外 (对于隔离、安全性,或其他原因)。 TaskHostFactory。

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

虚拟任务参数

与任何其他任务参数, MSBuildRuntime 和 MSBuildArchitecture 可以从生成属性设置。

<Project xmlns="https://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 测试上下文或使用生成属性通过上下文信息其他任务参数。

备注

UsingTask 属性可以从工具集和环境属性设置为。

MSBuildRuntime 和 MSBuildArchitecture 参数提供最灵活的方式来设置目标上下文,,而且最有限范围内。 一种,,因为它们在任务实例设置和不会计算,直至任务中运行,它们可以从完全的大小属性导出它们的值可用于在计算时间和生成时。 另一方面,这些参数仅适用于一任务的特定实例在特定目标的。

备注

任务参数计算在父节点中,不在任务宿主中。是运行时环境变量或结构依赖项 (例如程序文件位置) 将计算为与父节点的值。但是,因此,如果同一环境变量直接由任务读取,它将被正确计算在任务宿主中。

请参见

概念

配置目标和任务