2016-04-18 9 views
2

Ich muss alle Projekte überspringen, die auf ".UnitTests" aus Build-Pipeline beenden, wenn ich es für ARM baue.Wie überspringe ich Projekte mit einer flexiblen Regel beim Erstellen einer .sln-Datei mit MSBuild?

Und ich muss es bauen, wenn ich für x86 baue, aber andere Projekte ausschließen?

Ist es möglich, einige Projekte aus dem Build-Prozess durch einige Regeln zu überspringen?

+0

Interessante Frage, ich bin auch an einer Antwort interessiert. Vielleicht kann [diese Antwort] (http://stackoverflow.com/a/17712386/4534262) helfen. Zusammen mit [diesem Artikel] (http://www.codeproject.com/Tips/177770/Creating-MSBuild-projects-from-sln-files). – Nikerboker

Antwort

2

Der Msbuild Weg dies zu tun wäre, die Configuration Manager (Build -> Configuration Manager) in Visual Studio zu verwenden, um die Projekte auf die Lösung Config/Plattform abzubilden.

Im Configuration Manager:

  1. wählen ARM als Active Solution Platform und deaktivieren Build für alle *.UnitTests Projekte und sicherzustellen, dass die anderen Projekte Build geprüft haben.

  2. Wählen Sie x86 als Active Solution Platform Aktivieren/Deaktivieren Sie Build basierend auf welche Projekte Sie erstellen möchten.

Dies bedeutet, dass, wenn Sie Ihre Lösung für Platform=ARM, alle Projekte mit Ausnahme für den *.UnitTests bauen, bauen. Und ähnlich für Platform=x86.

Sie können mehr darüber lesen here.

Update:

Wenn Sie mehr kundenspezifische Logik müssen Projekte zur Auswahl zu bauen, dann könnten Sie eine neue Top-Level-Build-Datei wie erstellen:

<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <ItemGroup Condition="'$(Platform)' == 'ARM'"> 
      <ARMProjects Include="abc\*.csproj" Exclude="**\*.UnitTests.csproj"/> 
      <ARMProjects Include="def\*.csproj" Exclude="**\*.UnitTests.csproj"/> 
    </ItemGroup> 

    <ItemGroup Condition="'$(Platform)' == 'x86'"> 
     <!-- Create a group named X86Projects and select the projects as you need to --> 
    </ItemGroup> 

    <Target Name="Build"> 
     <MSBuild Project="@(ARMProjects)" Targets="Build" Condition="'$(Platform)' == 'ARM'"/> 
     <MSBuild Project="@(X86Projects)" Targets="Build" Condition="'$(Platform)' == 'x86'"/> 
    </Target> 
</Project> 

Tweak die Build-Ziele oder die entsprechenden ausgewählten Projekte auf deine Bedürfnisse.

+0

Das ist wahrscheinlich hilfreicher Rat für einige Leser, aber das ist die VS-Art, dies zu tun, nicht die Msbuild-Art, dies zu tun. – zeromus

+0

Ich weiß es, aber ich suche nach einer Möglichkeit, es auf dem CI-Server im laufenden Betrieb zu ändern, anstatt statische Konfigurationen zu verwenden. –

+0

@ViacheslavSmityukh Auf Ihrem CI-Server können Sie die Konfiguration + Plattform über Befehlszeilenargumente wählen: 'msbuild/p: Konfiguration = Debug/p: Platform = x86'. Wenn Sie möchten, dass mehr benutzerdefinierte Logik die zu erstellenden Projekte auswählt, benötigen Sie eine benutzerdefinierte msbuild-Datei, die das für Sie erledigt. Ich werde die Antwort aktualisieren, um das aufzunehmen. – radical

Verwandte Themen