MSBuild-zadanie
Kompiluje projekty MSBuild z innego projektu MSBuild.
Parametry
W poniższej tabeli opisano parametry zadania MSBuild
.
Parametr | Opis |
---|---|
BuildInParallel |
Opcjonalny parametr Boolean .Jeśli true , projekty określone w parametrze Projects są tworzone równolegle, jeśli jest to możliwe. Wartość domyślna to false . |
Projects |
Wymagany parametr ITaskItem[] .Określa pliki projektu do skompilowania. |
Properties |
Opcjonalny parametr String .Rozdzielana średnikami lista par nazwa/wartość właściwości, które mają być stosowane jako właściwości globalne do projektu podrzędnego. Po określeniu tego parametru jest ona funkcjonalnie równoważna ustawieniu właściwości, które mają przełącznik -property podczas kompilacji za pomocą MSBuild.exe. Na przykład: Properties="Configuration=Debug;Optimize=$(Optimize)" Po przekazaniu właściwości do projektu za pośrednictwem parametru Properties program MSBuild może utworzyć nowe wystąpienie projektu, nawet jeśli plik projektu został już załadowany. Program MSBuild tworzy pojedyncze wystąpienie projektu dla danej ścieżki projektu i unikatowy zestaw właściwości globalnych. Na przykład to zachowanie umożliwia utworzenie wielu zadań MSBuild, które wywołają myproject.proj, przy użyciu polecenia Configuration=Release i otrzymujesz jedno wystąpienie myproject.proj (jeśli w zadaniu nie określono żadnych unikatowych właściwości). Jeśli określisz właściwość, która nie została jeszcze zaobserwowana przez program MSBuild, program MSBuild utworzy nowe wystąpienie projektu, które można skompilować równolegle z innymi wystąpieniami projektu. Na przykład konfiguracja wydania może być kompilować w tym samym czasie co konfiguracja debugowania. |
RebaseOutputs |
Opcjonalny parametr Boolean .Jeśli true , względne ścieżki docelowych elementów wyjściowych z utworzonych projektów mają ścieżki dostosowane do stosunku do projektu wywołującego. Wartość domyślna to false . |
RemoveProperties |
Opcjonalny parametr String .Określa zestaw właściwości globalnych do usunięcia. |
RunEachTargetSeparately |
Opcjonalny parametr Boolean .Jeśli true , zadanie MSBuild wywołuje każdy element docelowy na liście przekazany do programu MSBuild pojedynczo, a nie jednocześnie. Ustawienie tego parametru na true gwarantuje, że kolejne obiekty docelowe są wywoływane, nawet jeśli wcześniej wywoływane obiekty docelowe nie powiodły się. W przeciwnym razie błąd kompilacji zatrzyma wywołanie wszystkich kolejnych obiektów docelowych. Wartość domyślna to false . |
SkipNonexistentProjects |
Opcjonalny parametr Boolean .Jeśli true , pliki projektu, które nie istnieją na dysku, zostaną pominięte. W przeciwnym razie takie projekty spowodują błąd. Wartość domyślna to false . |
SkipNonexistentTargets |
Opcjonalny parametr Boolean .Jeśli true , pliki projektu, które istnieją, ale nie zawierają nazwanych Targets , są pomijane. W przeciwnym razie takie projekty spowodują błąd. Wartość domyślna to false . Wprowadzono w programie MSBuild 15.5. |
StopOnFirstFailure |
Opcjonalny parametr Boolean .Jeśli true , gdy nie można skompilować jednego z projektów, nie zostaną skompilowane żadne projekty. Obecnie ta opcja nie jest obsługiwana podczas równoległego kompilowania (z wieloma procesorami). |
TargetAndPropertyListSeparators |
Opcjonalny parametr String[] .Określa listę obiektów docelowych i właściwości jako Project metadanych elementu). Separatory są niewyobrażalne przed przetworzeniem. Na przykład %3B (uniknięta ';') jest traktowana tak, jakby była niewyobrażona ";". |
TargetOutputs |
Opcjonalny ITaskItem[] parametr wyjściowy tylko do odczytu.Zwraca dane wyjściowe skompilowanych obiektów docelowych ze wszystkich plików projektu. Zwracane są tylko dane wyjściowe z określonych obiektów docelowych, a nie żadne dane wyjściowe, które mogą istnieć dla obiektów docelowych, od których zależą te obiekty docelowe. Parametr TargetOutputs zawiera również następujące metadane:- MSBuildSourceProjectFile : plik projektu MSBuild zawierający element docelowy, który ustawia dane wyjściowe.- MSBuildSourceTargetName : element docelowy, który ustawia dane wyjściowe.
Uwaga: Jeśli chcesz zidentyfikować dane wyjściowe z każdego pliku projektu lub obiektu docelowego oddzielnie, uruchom zadanie MSBuild oddzielnie dla każdego pliku projektu lub obiektu docelowego. Jeśli uruchomisz zadanie MSBuild tylko raz, aby skompilować wszystkie pliki projektu, dane wyjściowe wszystkich obiektów docelowych zostaną zebrane w jednej tablicy. |
Targets |
Opcjonalny parametr String .Określa element docelowy lub docelowy do skompilowania w plikach projektu. Użyj średnika, aby oddzielić listę nazw docelowych. Jeśli w zadaniu MSBuild nie określono żadnych obiektów docelowych, zostaną skompilowane domyślne obiekty docelowe określone w plikach projektu.
Uwaga: Miejsca docelowe muszą znajdować się we wszystkich plikach projektu. Jeśli tak nie jest, wystąpi błąd kompilacji. |
ToolsVersion |
Opcjonalny parametr String .Określa ToolsVersion do użycia podczas kompilowania projektów przekazanych do tego zadania.Umożliwia zadaniu MSBuild skompilowanie projektu, który jest przeznaczony dla innej wersji programu .NET Framework niż określony w projekcie. Prawidłowe wartości to 2.0 , 3.0 i 3.5 . Wartość domyślna to 3.5 . |
Uwagi
Oprócz parametrów wymienionych wcześniej to zadanie dziedziczy parametry z klasy TaskExtension, która sama dziedziczy z klasy Task. Aby uzyskać listę tych dodatkowych parametrów i ich opisów, zobacz TaskExtension, klasa bazowa.
W przeciwieństwie do używania zadania Exec, aby uruchomić MSBuild.exe, to zadanie używa tego samego procesu MSBuild do kompilowania projektów podrzędnych. Lista już utworzonych obiektów docelowych, które można pominąć, jest udostępniana między kompilacjami nadrzędnymi i podrzędnymi. To zadanie jest również szybsze, ponieważ nie jest tworzony nowy proces MSBuild.
To zadanie może przetwarzać nie tylko pliki projektu, ale także pliki rozwiązań. W programie MSBuild 17.12 lub nowszym akceptowane są formaty plików .slnx
i .sln
rozwiązania.
Każda konfiguracja wymagana przez program MSBuild w celu umożliwienia kompilowania projektów w tym samym czasie, nawet jeśli konfiguracja obejmuje infrastrukturę zdalną (na przykład porty, protokoły, limity czasu, ponawianie prób itd.), należy skonfigurować przy użyciu pliku konfiguracji. Jeśli to możliwe, elementy konfiguracji powinny być w stanie określić jako parametry zadania MSBuild
.
Począwszy od programu MSBuild 3.5, projekty rozwiązań mają teraz powierzchnię TargetOutputs ze wszystkich podprojektów, które kompiluje.
Przekazywanie właściwości do projektów
W wersjach programu MSBuild wcześniejszych niż MSBuild 3.5 przekazywanie różnych zestawów właściwości do różnych projektów wymienionych w elemencie MSBuild było trudne. Jeśli użyto atrybutu Właściwości zadania MSBuild, jego ustawienie zostało zastosowane do wszystkich projektów tworzonych, chyba że zadanie MSBuild i warunkowo podano różne właściwości dla każdego projektu na liście elementów.
Program MSBuild 3.5 udostępnia jednak dwa nowe zarezerwowane elementy metadanych, Właściwości i DodatkoweWłaściwości, które zapewniają elastyczny sposób przekazywania różnych właściwości dla różnych projektów tworzonych przy użyciu zadania MSBuild.
Uwaga
Te nowe elementy metadanych mają zastosowanie tylko do elementów przekazanych w atrybucie Projects zadania MSBuild.
Korzyści wynikające z kompilacji z wieloma procesorami
Jedną z głównych zalet korzystania z tych nowych metadanych jest równoległe kompilowanie projektów w systemie wieloprocesorowym. Metadane umożliwiają skonsolidowanie wszystkich projektów w jeden zadania MSBuild wywołanie bez konieczności wykonywania żadnych zadań wsadowych lub warunkowych programu MSBuild. Podczas wywoływania tylko jednego zadania MSBuildwszystkie projekty wymienione w atrybucie Projects są kompilowane równolegle. (Tylko wtedy, gdy atrybut BuildInParallel=true
znajduje się w zadania MSBuild). Aby uzyskać więcej informacji, zobacz Kompilowanie wielu projektów równolegle.
Metadane właściwości
Po określeniu metadane właściwości zastępują parametr Właściwości zadania, podczas gdy Właściwości dodatkowe metadane są dołączane do definicji parametru.
Typowym scenariuszem jest kompilowanie wielu plików rozwiązań przy użyciu zadania MSBuild, tylko przy użyciu różnych konfiguracji kompilacji. Możesz utworzyć rozwiązanie a1 przy użyciu konfiguracji debugowania i rozwiązania a2 przy użyciu konfiguracji wydania. W programie MSBuild 2.0 ten plik projektu będzie wyglądać następująco:
Uwaga
W poniższym przykładzie "..." reprezentuje dodatkowe pliki rozwiązań.
a.proj
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build">
<MSBuild Projects="a1.sln..." Properties="Configuration=Debug"/>
<MSBuild Projects="a2.sln" Properties="Configuration=Release"/>
</Target>
</Project>
Korzystając z metadanych właściwości, można jednak uprościć ten kod, aby użyć pojedynczego zadania MSBuild, jak pokazano w poniższym przykładzie:
a.proj
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectToBuild Include="a1.sln...">
<Properties>Configuration=Debug</Properties>
</ProjectToBuild>
<ProjectToBuild Include="a2.sln">
<Properties>Configuration=Release</Properties>
</ProjectToBuild>
</ItemGroup>
<Target Name="Build">
<MSBuild Projects="@(ProjectToBuild)"/>
</Target>
</Project>
- lub -
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectToBuild Include="a1.sln..."/>
<ProjectToBuild Include="a2.sln">
<Properties>Configuration=Release</Properties>
</ProjectToBuild>
</ItemGroup>
<Target Name="Build">
<MSBuild Projects="@(ProjectToBuild)"
Properties="Configuration=Debug"/>
</Target>
</Project>
Dodatkowe metadane właściwości
Rozważmy następujący scenariusz, w którym tworzysz dwa pliki rozwiązania przy użyciu zadania MSBuild, zarówno przy użyciu konfiguracji wydania, jak i jednej z architektury x86, a drugiej przy użyciu architektury ia64. W programie MSBuild 2.0 należy utworzyć wiele wystąpień zadania MSBuild: jeden do skompilowania projektu przy użyciu konfiguracji wydania z architekturą x86, a drugi przy użyciu konfiguracji wydania z architekturą ia64. Plik projektu wygląda następująco:
a.proj
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build">
<MSBuild Projects="a1.sln..." Properties="Configuration=Release;
Architecture=x86"/>
<MSBuild Projects="a2.sln" Properties="Configuration=Release;
Architecture=ia64"/>
</Target>
</Project>
Korzystając z metadanych AdditionalProperties, można uprościć to, aby użyć pojedynczego zadania MSBuild przy użyciu następujących elementów:
a.proj
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectToBuild Include="a1.sln...">
<AdditionalProperties>Architecture=x86
</AdditionalProperties>
</ProjectToBuild>
<ProjectToBuild Include="a2.sln">
<AdditionalProperties>Architecture=ia64
</AdditionalProperties>
</ProjectToBuild>
</ItemGroup>
<Target Name="Build">
<MSBuild Projects="@(ProjectToBuild)"
Properties="Configuration=Release"/>
</Target>
</Project>
Przykład
W poniższym przykładzie użyto zadania MSBuild
do skompilowania projektów określonych przez kolekcję elementów ProjectReferences
. Wynikowe dane wyjściowe docelowego są przechowywane w kolekcji elementów AssembliesBuiltByChildProjects
.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectReferences Include="*.*proj" />
</ItemGroup>
<Target Name="BuildOtherProjects">
<MSBuild
Projects="@(ProjectReferences)"
Targets="Build">
<Output
TaskParameter="TargetOutputs"
ItemName="AssembliesBuiltByChildProjects" />
</MSBuild>
</Target>
</Project>
Zobacz też
- Zadania
- — odniesienie do zadania