我以前为此使用过MSBuild Community Tasks GetSolutionProjects,但不幸的是它依赖于 .NET 3.5。
要使用 a CodeTask(自 .NET 4 起可用)完成此操作,请执行以下操作:
<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>
Run Code Online (Sandbox Code Playgroud)
并像这样调用它:
<!-- Gets the projects composing the specified solution -->
<Target Name="GetProjectsFromSolution">
<GetProjectsFromSolutionCodeTask Solution="%(Solution.Fullpath)">
<Output ItemName="ProjectFiles" TaskParameter="Output"/>
</GetProjectsFromSolutionCodeTask >
</Target>
Run Code Online (Sandbox Code Playgroud)
这将ProjectFiles使用解决方案中所有项目的绝对路径填充项目集合。
请注意:路径CodeTaskFactory因 MSBuild 版本而异。此处的示例适用于 MSBuild 14.0。
| 归档时间: |
|
| 查看次数: |
939 次 |
| 最近记录: |