0
MSBUILDを使用する場合、ソリューションからプロジェクトファイルのリストを取得するにはどうすればよいですか?MSBUILD:ソリューションファイルを解析してプロジェクトパスを取得する方法
たとえば、すべての.csprojを.slnから取得します。
MSBUILDを使用する場合、ソリューションからプロジェクトファイルのリストを取得するにはどうすればよいですか?MSBUILD:ソリューションファイルを解析してプロジェクトパスを取得する方法
たとえば、すべての.csprojを.slnから取得します。
私はこれまでに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です。