Delen via


MSBuild-taak

Bouwt MSBuild-projecten van een ander MSBuild-project.

Parameterwaarden

In de volgende tabel worden de parameters van de MSBuild taak beschreven.

Maatstaf Beschrijving
BuildInParallel Optionele Boolean parameter.

Als true, worden de projecten die zijn opgegeven in de parameter Projects parallel gebouwd, indien mogelijk. De standaardwaarde is false.
Projects Vereiste ITaskItem[] parameter.

Hiermee geeft u de projectbestanden die moeten worden gebouwd.
Properties Optionele String parameter.

Een door puntkomma's gescheiden lijst met eigenschapsnaam/waardeparen die moeten worden toegepast als globale eigenschappen op het onderliggende project. Wanneer u deze parameter opgeeft, is deze functioneel gelijk aan het instellen van eigenschappen met de -property switch wanneer u bouwt met MSBuild.exe. Voorbeeld:

Properties="Configuration=Debug;Optimize=$(Optimize)"

Wanneer u eigenschappen doorgeeft aan het project via de parameter Properties, kan MSBuild een nieuw exemplaar van het project maken, zelfs als het projectbestand al is geladen. MSBuild maakt één projectexemplaren voor een bepaald projectpad en een unieke set globale eigenschappen. Met dit gedrag kunt u bijvoorbeeld meerdere MSBuild-taken maken die myproject.projaanroepen, met Configuration=Release en u krijgt één exemplaar van myproject.proj (als er geen unieke eigenschappen zijn opgegeven in de taak). Als u een eigenschap opgeeft die nog niet is gezien door MSBuild, maakt MSBuild een nieuw exemplaar van het project, dat parallel kan worden gebouwd met andere exemplaren van het project. Een releaseconfiguratie kan bijvoorbeeld tegelijkertijd worden gebouwd als een foutopsporingsconfiguratie.
RebaseOutputs Optionele Boolean parameter.

Als true, worden de relatieve paden van doeluitvoeritems van de gemaakte projecten aangepast zodat deze relatief zijn ten opzichte van het aanroepende project. De standaardwaarde is false.
RemoveProperties Optionele String parameter.

Hiermee geeft u de set globale eigenschappen die u wilt verwijderen.
RunEachTargetSeparately Optionele Boolean parameter.

Als true, roept de MSBuild-taak elk doel in de lijst aan die één voor één is doorgegeven aan MSBuild, in plaats van tegelijkertijd. Als u deze parameter instelt op true garandeert u dat volgende doelen worden aangeroepen, zelfs als eerder aangeroepen doelen zijn mislukt. Anders stopt een buildfout met het aanroepen van alle volgende doelen. De standaardwaarde is false.
SkipNonexistentProjects Optionele Boolean parameter.

Als true, worden projectbestanden die niet op de schijf bestaan, overgeslagen. Anders veroorzaken dergelijke projecten een fout. Standaard ingesteld op false.
SkipNonexistentTargets Optionele Boolean parameter.

Als true, worden projectbestanden die bestaan, maar die de benoemde Targets niet bevatten, overgeslagen. Anders veroorzaken dergelijke projecten een fout. Standaard ingesteld op false. Geïntroduceerd in MSBuild 15.5.
StopOnFirstFailure Optionele Boolean parameter.

Als true, wanneer een van de projecten niet kan worden gebouwd, worden er geen projecten meer gebouwd. Deze optie wordt momenteel niet ondersteund bij het parallel bouwen (met meerdere processors).
TargetAndPropertyListSeparators Optionele String[] parameter.

Hiermee geeft u een lijst met doelen en eigenschappen op als Project itemmetagegevens). Scheidingstekens worden niet gescaped voordat ze worden verwerkt. Bijvoorbeeld, %3B (een escaped ';') wordt behandeld alsof het een ongezichtige ';' is.
TargetOutputs Optionele ITaskItem[] alleen-lezen uitvoerparameter.

Retourneert de uitvoer van de ingebouwde doelen van alle projectbestanden. Alleen de uitvoer van de opgegeven doelen worden geretourneerd, niet alle uitvoer die kan bestaan op doelen waarop deze doelen afhankelijk zijn.

De parameter TargetOutputs bevat ook de volgende metagegevens:

- MSBuildSourceProjectFile: het MSBuild-projectbestand dat het doel bevat dat de uitvoer heeft ingesteld.
- MSBuildSourceTargetName: het doel waarmee de uitvoer wordt ingesteld. Opmerking: Als u de uitvoer van elk projectbestand of doel afzonderlijk wilt identificeren, voert u de MSBuild taak afzonderlijk uit voor elk projectbestand of doel. Als u de MSBuild taak slechts eenmaal uitvoert om alle projectbestanden te bouwen, worden de uitvoer van alle doelen verzameld in één matrix.
Targets Optionele String parameter.

Hiermee geeft u het doel of de doelen die moeten worden gebouwd in de projectbestanden. Gebruik een puntkomma om een lijst met doelnamen te scheiden. Als er geen doelen zijn opgegeven in de MSBuild taak, worden de standaarddoelen die zijn opgegeven in de projectbestanden gemaakt. Opmerking: De doelen moeten worden uitgevoerd in alle projectbestanden. Als dat niet het geval is, treedt er een buildfout op.
ToolsVersion Optionele String parameter.

Hiermee geeft u de ToolsVersion te gebruiken bij het bouwen van projecten die aan deze taak worden doorgegeven.

Hiermee kan een MSBuild-taak een project bouwen dat is gericht op een andere versie van het .NET Framework dan de versie die is opgegeven in het project. Geldige waarden zijn 2.0, 3.0en 3.5. De standaardwaarde is 3.5.

Opmerkingen

Naast de eerder vermelde parameters neemt deze taak parameters over van de TaskExtension-klasse, die zelf wordt overgenomen van de Task-klasse. Zie TaskExtension-basisklassevoor een lijst met deze aanvullende parameters en beschrijvingen.

In tegenstelling tot het gebruik van de Exec-taak om MSBuild.exete starten, gebruikt deze taak hetzelfde MSBuild-proces om de onderliggende projecten te bouwen. De lijst met reeds gebouwde doelen die kunnen worden overgeslagen, wordt gedeeld tussen de bovenliggende en onderliggende builds. Deze taak is ook sneller omdat er geen nieuw MSBuild-proces wordt gemaakt.

Deze taak kan niet alleen projectbestanden verwerken, maar ook oplossingsbestanden. In MSBuild 17.12 en hoger worden zowel .slnx- als .sln oplossingsbestandsindelingen geaccepteerd.

Elke configuratie die door MSBuild is vereist om projecten tegelijkertijd te kunnen bouwen, zelfs als de configuratie externe infrastructuur omvat (bijvoorbeeld poorten, protocollen, time-outs, nieuwe pogingen, enzovoort), moet worden geconfigureerd met behulp van een configuratiebestand. Indien mogelijk moeten configuratie-items kunnen worden opgegeven als taakparameters voor de MSBuild taak.

Vanaf MSBuild 3.5 bieden oplossingsprojecten nu TargetOutputs van alle subprojecten die worden gebouwd.

Eigenschappen doorgeven aan projecten

In versies van MSBuild vóór MSBuild 3.5 was het lastig om verschillende sets eigenschappen door te geven aan verschillende projecten die worden vermeld in het MSBuild-item. Als u het kenmerk Properties van de MSBuild-taakhebt gebruikt, is de instelling ervan toegepast op alle projecten die worden gemaakt, tenzij u de MSBuild-taak in batches en voorwaardelijk verschillende eigenschappen hebt opgegeven voor elk project in de itemlijst.

MSBuild 3.5 biedt echter twee nieuwe gereserveerde metagegevensitems, Properties en AdditionalProperties, die u een flexibele manier bieden om verschillende eigenschappen door te geven voor verschillende projecten die worden gebouwd met behulp van de MSBuild-taak.

Notitie

Deze nieuwe metagegevensitems zijn alleen van toepassing op items die zijn doorgegeven in het kenmerk Projecten van de MSBuild-taak.

Voordelen van build met meerdere processoren

Een van de belangrijkste voordelen van het gebruik van deze nieuwe metagegevens vindt plaats wanneer u uw projecten parallel bouwt op een systeem met meerdere processoren. Met de metagegevens kunt u alle projecten samenvoegen in één MSBuild-taak aanroepen zonder dat u batchverwerkings- of voorwaardelijke MSBuild-taken hoeft uit te voeren. En wanneer u slechts één MSBuild-taakaanroept, worden alle projecten die worden vermeld in het kenmerk Projecten parallel gebouwd. (Alleen als het kenmerk BuildInParallel=true aanwezig is in de MSBuild-taak.) Zie Meerdere projecten parallelbouwen voor meer informatie.

Eigenschappenmetagegevens

Wanneer deze eigenschap is opgegeven, overschrijft metagegevens de parameter Eigenschappen van de taak, terwijl AdditionalProperties metagegevens worden toegevoegd aan de definities van de parameter.

Een veelvoorkomend scenario is wanneer u meerdere oplossingsbestanden bouwt met behulp van de MSBuild-taak, alleen met behulp van verschillende buildconfiguraties. U kunt oplossing a1 bouwen met behulp van de foutopsporingsconfiguratie en oplossing a2 met behulp van de releaseconfiguratie. In MSBuild 2.0 ziet dit projectbestand er als volgt uit:

Notitie

In het volgende voorbeeld: '...' vertegenwoordigt aanvullende oplossingsbestanden.

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>

Met behulp van de metagegevens eigenschappen kunt u deze code echter vereenvoudigen om één MSBuild-taak te gebruiken, zoals wordt weergegeven in het volgende voorbeeld:

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>

- or -

<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>

AdditionalProperties-metagegevens

Houd rekening met het volgende scenario waarin u twee oplossingsbestanden bouwt met behulp van de MSBuild-taak, beide met behulp van de releaseconfiguratie, maar één met behulp van de x86-architectuur en de andere met behulp van de ia64-architectuur. In MSBuild 2.0 moet u meerdere exemplaren maken van de MSBuild-taak: een voor het bouwen van het project met behulp van de releaseconfiguratie met de x86-architectuur, de andere met behulp van de releaseconfiguratie met de ia64-architectuur. Het projectbestand ziet er als volgt uit:

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>

Met behulp van de additionalProperties-metagegevens kunt u dit vereenvoudigen om één MSBuild-taak te gebruiken met behulp van de volgende:

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>

Voorbeeld

In het volgende voorbeeld wordt de MSBuild taak gebruikt om de projecten te bouwen die zijn opgegeven door de ProjectReferences itemverzameling. De resulterende doeluitvoer wordt opgeslagen in de AssembliesBuiltByChildProjects itemverzameling.

<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>

Zie ook