2016-04-26 12 views

答えて

3

私はこれまでにMSBuild Community Tasks'sGetSolutionProjectsを使用していましたが、残念ながら.NET 3.5に依存しています。 (.NET 4以降で利用可能)CodeTaskを使用して、これを達成するために

は、次の手順を実行します

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

などのようにそれを呼び出す:これはとProjectFilesアイテムコレクションに移入されます

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

ソリューション内のすべてのプロジェクトの絶対パス。

注:CodeTaskFactoryへのパスは、MSBuildのバージョンによって異なります。ここでの例はMSBuild 14.0です。

関連する問題