Поделиться через


Практическое руководство. Настройка целевых платформ и задач

Выбранные задачи msbuild могут быть установлены для запуска среды они целевой объект, независимо от компьютера разработки среды.Например, при использовании 64 64-разрядном компьютере для построения приложения, который нацелено 32 архитектуру, выбранные задачи выполняются в процессе обновления 32 (sp2).

ПримечаниеПримечание

Если задача построения написана на языке .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, которое выполняется в текущем процессе. в противном случае - значение TaskHostFactory передает задачу msbuild, которая выполняет задачу в процессе, который соответствует контексту целевого объекта.Даже если текущий контекст и контекст целевого объекта совпадают, можно заставить задачу выполнения вне процесса (для изоляции, безопасности или по другим причинам), установив 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 обеспечивают самый гибкий способ задать контекст целевого объекта, но также наиболее ограниченный по области применения.На одной руке, поскольку они сам набор на экземпляре задачи и не вычисляются до тех пор, пока задача не будет выполняться, они могут наследоваться перед их значения из полной области свойств, доступных на оценк-Time, так и наTime.С другой стороны, эти параметры применяются только к конкретному экземпляру задачи в указанном целевом объекте.

ПримечаниеПримечание

Параметры задачи, вычисляются в контексте родительского узла, а не в контексте узла задачи. Переменные среды, продолжитены по времени или зависимые зодчества (например, расположение программных файлов) оценят к значению, соответствующий родительскому узлу.Однако если одна и та же переменная среды, она доступна непосредственно задачей будет правильно вычисляется в контексте узла задачи.

См. также

Основные понятия

Настройка целевых платформ и задач