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