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 truejest 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 truezadanie 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 trueplik 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 truepliki 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 truekompilacja 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>

Zobacz też