zadanie MSBuild
Kompiluje projekty MSBuild z innego projektu MSBuild.
Parametry
W poniższej tabeli opisano parametry MSBuild
zadania.
Parametr | Opis |
---|---|
BuildInParallel |
Opcjonalny Boolean parametr.Jeśli true jest to możliwe, projekty określone w parametrze Projects są tworzone równolegle. Wartość domyślna to false . |
Projects |
Wymagany parametr interfejsu ITaskItem[] .Określa pliki projektu do skompilowania. |
Properties |
Opcjonalny String parametr.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 właściwościom, które mają przełącznik -property podczas kompilacji za pomocą msBuild.exe. 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ą plik myproject.proj, przy użyciu polecenia Configuration=Release i uzyskania pojedynczego wystąpienia pliku 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 Boolean parametr.Jeśli true ścieżki względne docelowych elementów wyjściowych z utworzonych projektów mają ich ścieżki dostosowane do stosunku do projektu wywołującego. Wartość domyślna to false . |
RemoveProperties |
Opcjonalny String parametr.Określa zestaw właściwości globalnych do usunięcia. |
RunEachTargetSeparately |
Opcjonalny Boolean parametr.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 w celu true gwarancji, ż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 Boolean parametr.Jeśli true plik projektu, który nie istnieje na dysku, zostanie pominięty. W przeciwnym razie takie projekty spowodują błąd. Wartość domyślna to false . |
SkipNonexistentTargets |
Opcjonalny Boolean parametr.Jeśli true pliki projektu, które istnieją, ale nie zawierają nazwy Targets , zostaną pominięte. W przeciwnym razie takie projekty spowodują błąd. Wartość domyślna to false . Wprowadzono w programie MSBuild 15.5. |
StopOnFirstFailure |
Opcjonalny Boolean parametr.Jeśli true kompilacja jednego z projektów nie powiedzie się, nie zostaną skompilowane żadne projekty. Obecnie nie jest to obsługiwane w przypadku równoległego kompilowania (z wieloma procesorami). |
TargetAndPropertyListSeparators |
Opcjonalny String[] parametr.Określa listę obiektów docelowych i właściwości jako Project metadanych elementu. Separatory zostaną usunięte przed przetworzeniem. np. %3B (unikniętą ';') będzie traktowana tak, jakby była nieunikniętą ";". |
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 MSBuild zadanie oddzielnie dla każdego pliku projektu lub obiektu docelowego. Jeśli uruchomisz MSBuild zadanie tylko raz, aby skompilować wszystkie pliki projektu, dane wyjściowe wszystkich obiektów docelowych zostaną zebrane w jednej tablicy. |
Targets |
Opcjonalny String parametr.Określa element docelowy lub docelowy do skompilowania w plikach projektu. Użyj średnika, aby oddzielić listę nazw docelowych. Jeśli w zadaniu nie określono MSBuild żadnych obiektów docelowych, zostaną skompilowane domyślne obiekty docelowe określone w plikach projektu. Uwaga: obiekty docelowe muszą znajdować się we wszystkich plikach projektu. Jeśli tak nie jest, wystąpi błąd kompilacji. |
ToolsVersion |
Opcjonalny String parametr.Określa, który ToolsVersion ma być używany 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 powyżej to zadanie dziedziczy parametry z TaskExtension klasy, która sama dziedziczy z Task klasy. Aby uzyskać listę tych dodatkowych parametrów i ich opisy, zobacz TaskExtension, klasa bazowa.
W przeciwieństwie do uruchamiania msBuild.exe za pomocą zadania Exec 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ń.
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 MSBuild
zadania.
Począwszy od programu MSBuild 3.5, projekty rozwiązań udostępniają teraz obiekty TargetOutputs ze wszystkich kompilowania projektów podrzędnych.
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 tworzonych projektów, chyba że zadanie MSBuild zostało wsadowe i warunkowo podane 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 jednym wywołaniu zadania MSBuild bez konieczności wykonywania żadnych zadań wsadowych lub warunkowych programu MSBuild. A po wywołaniu tylko jednego zadania MSBuild wszystkie projekty wymienione w atrybucie Projects zostaną skompilowane równolegle. (Tylko wtedy, gdy BuildInParallel=true
atrybut jest obecny w zadaniu MSBuild). Aby uzyskać więcej informacji, zobacz Tworzenie 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 metadane AdditionalProperties 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ć to, aby użyć pojedynczego zadania MSBuild, jak pokazano poniżej:
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 jedną z architektury x86, a drugą 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, korzystając z następującego polecenia:
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 MSBuild
zadania do skompilowania projektów określonych przez ProjectReferences
kolekcję elementów. Wynikowe dane wyjściowe docelowe są przechowywane w kolekcji AssembliesBuiltByChildProjects
elementów.
<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>