Wie kann ich die Liste der Projektdateien aus einer Lösung abrufen, wenn MSBUILD verwendet wird?MSBUILD: So analysieren Sie die Lösungsdatei, um Projektpfade zu erhalten
Zum Beispiel bekommen alle .csproj von einer .sln.
Wie kann ich die Liste der Projektdateien aus einer Lösung abrufen, wenn MSBUILD verwendet wird?MSBUILD: So analysieren Sie die Lösungsdatei, um Projektpfade zu erhalten
Zum Beispiel bekommen alle .csproj von einer .sln.
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.