2016-04-26 10 views

Antwort

3

Ich war zuvor mit MSBuild Community Tasks'sGetSolutionProjects für diese, aber leider hat es eine Abhängigkeit von .NET 3.5.

Um dies zu erreichen ein mit CodeTask (verfügbar seit .NET 4) wie folgt vorgehen:

<UsingTask TaskName="GetProjectsFromSolutionCodeTask" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll" > 
    <ParameterGroup> 
     <Solution ParameterType="System.String" Required="true"/> 
     <Output ParameterType="Microsoft.Build.Framework.ITaskItem[]" Output="true"/> 
    </ParameterGroup> 
    <Task> 
     <Reference Include="System.Xml"/> 
     <Reference Include="Microsoft.Build"/> 
     <Using Namespace="Microsoft.Build.Construction"/> 
     <Code Type="Fragment" Language="cs"> 
     <![CDATA[ 
     var _solutionFile = SolutionFile.Parse(Solution); 
     Output = _solutionFile.ProjectsInOrder 
      .Where(proj => proj.ProjectType == SolutionProjectType.KnownToBeMSBuildFormat) 
      .Select(proj => new TaskItem(proj.AbsolutePath)) 
      .ToArray(); 
     ]]> 
     </Code> 
    </Task> 
    </UsingTask> 

und rufen Sie es wie folgt: mit der

<!-- Gets the projects composing the specified solution --> 
    <Target Name="GetProjectsFromSolution"> 
    <GetProjectsFromSolutionCodeTask Solution="%(Solution.Fullpath)"> 
     <Output ItemName="ProjectFiles" TaskParameter="Output"/> 
    </GetProjectsFromSolutionCodeTask > 
    </Target> 

Dies wird eine ProjectFiles Artikel Sammlung füllen absoluter Pfad aller Projekte innerhalb der Lösung.

Hinweis: Der Pfad zu CodeTaskFactory variiert je nach MSBuild-Version. Beispiel hier ist für MSBuild 14.0.

Verwandte Themen