Jak: Konfigurowanie cele i zadania
Wybrane zadania MSBuild można ustawić do uruchamiania w środowisku, które ich cel, niezależnie od środowiska na komputerze deweloperskim.Na przykład użycie komputera 64-bitowego do zbudowania danej architektury cele 32-bitowych aplikacji, wybrane zadania są uruchamiane w 32-bitowego procesu.
[!UWAGA]
Jeśli zadania kompilacji jest napisany w.NET języka, takie jak Visual C# lub Visual Basic i jest nie wykorzystania zasobów macierzystych lub narzędzia, a następnie go będzie uruchamiane w dowolnym kontekście docelowych bez dostosowywania.
UsingTask atrybuty i parametry zadania
Następujące UsingTask atrybuty wpływają na wszystkie operacje zadania procesu kompilacji w szczególności:
Runtime Atrybut, jeśli jest obecny, określa wspólne wersji runtime (CLR) języka i można wykonać jeden z następujących wartości: CLR2, CLR4, CurrentRuntime, lub * (wszelkie runtime).
Architecture Atrybut, jeśli jest obecny, ustawia platformy i bitowości i może mieć jedną z następujących wartości: x86, x64, CurrentArchitecture, lub * (wszelkie architecture).
TaskFactory Atrybut, jeśli jest obecny, ustawia factory zadania, tworzy wystąpienie zadania i zajmuje tylko wartość TaskHostFactory.Aby uzyskać więcej informacji zobacz sekcję fabryk zadania w dalszej części tego dokumentu.
<UsingTask TaskName="SimpleTask"
Runtime="CLR2"
Architecture="x86"
AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v3.5.dll" />
Można również użyć MSBuildRuntime i MSBuildArchitecture parametrami ustawianymi w kontekście docelowych pojedynczego zadania.
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="MyTarget">
<SimpleTask MSBuildRuntime="CLR2" MSBuildArchitecture= "x86"/>
</Target>
</Project>
Zanim program MSBuild uruchamia zadanie, szuka pasującego UsingTask który ma ten sam kontekst docelowych.Parametry, które są określone w UsingTask , ale w odpowiadające im zadania nie są uważane za mają być dopasowywane.Parametry, które określone zadanie, ale nie w odpowiednich UsingTask są również uważane za mają być dopasowywane.Jeśli nie określono wartości parametru w albo UsingTask lub zadania, wartości domyślne, aby * (każdy parametr).
Przestroga |
---|
Jeśli jest więcej niż jeden UsingTask istnieje i wszystkie mają odpowiadające sobie TaskName, Runtime, i Architecture atrybuty, ostatnia z nich oceniane zastępuje inne. |
Jeśli parametry zostały ustawione na zadanie, program MSBuild próbuje znaleźć UsingTask który pasuje do tych parametrów lub, co najmniej, nie jest w konflikcie z nich.Więcej niż jeden UsingTask można określić w kontekście docelowych tego samego zadania.Na przykład zadanie z różnych plików wykonywalnych dla różnych środowisk może wyglądać ta:
<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>
Zakłady zadania
Przed uruchomieniem zadania, program MSBuild sprawdza, czy jest wyznaczonych do działania w bieżącym kontekście oprogramowania.Jeśli zadanie jest wyznaczona, MSBuild przekazuje ją do AssemblyTaskFactory, który uruchamia je w bieżącym procesie; w przeciwnym razie MSBuild przekazuje zadanie do TaskHostFactory, który uruchamia zadanie w procesie, który pasuje do kontekstu docelowych.Nawet jeśli bieżący kontekst i kontekst docelowe odpowiada, można wymusić uruchomienie zadania, out-of-process (w przypadku izolacji, bezpieczeństwa lub innych powodów) przez ustawienie TaskFactory do TaskHostFactory.
<UsingTask TaskName="MisbehavingTask"
TaskFactory="TaskHostFactory"
AssemblyFile="$(MSBuildToolsPath)\MyTasks.dll">
</UsingTask>
Parametry zadania fantomu
Podobnie jak inne parametry zadania MSBuildRuntime i MSBuildArchitecture można ustawić właściwości kompilacji.
<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>
W przeciwieństwie do innych parametrów zadania MSBuildRuntime i MSBuildArchitecture nie są widoczne dla samego zadania.Zapisać zadanie, które jest świadomy kontekstu, w którym działa, należy albo przetestować kontekście przez wywołanie.NET Framework lub przekazywania informacji kontekstu poprzez inne parametry zadania za pomocą właściwości kompilacji.
[!UWAGA]
UsingTaskatrybuty można ustawić właściwości toolset i środowiska.
MSBuildRuntime i MSBuildArchitecture parametry zapewniają najbardziej elastyczny sposób ustawić kontekstu docelowej, ale najbardziej ograniczony w zakres.Z jednej strony ponieważ są ustawione na wystąpienie zadania, sama i nie są oceniane, dopóki zadanie jest uruchamiane, można czerpać ich wartości z pełnego zakresu właściwości dostępne w zarówno w czasie oceny, jak i w czasie kompilacji.Z drugiej strony parametry te dotyczą tylko konkretnego wystąpienia zadania w określonego elementu docelowego.
[!UWAGA]
Parametry zadania są oceniane w kontekście węzła nadrzędnego, a nie w kontekście hosta zadania.Zmienne środowiskowe, które są runtime - lub zależnego od architektury (takich jak lokalizacja plików programu), oceni wartość, która pasuje do węzła nadrzędnego.Jednakże jeśli w tej samej zmiennej środowiskowej jest odczytywane bezpośrednio przez zadanie, go poprawnie ocenia się w kontekście hosta zadania.