我的msbuild目标文件包含以下部分:
<ItemGroup>
<Targets Include="T1">
<Project>A\B.sln"</Project>
<DependsOnTargets>The targets T1 depends on</DependsOnTargets>
</Targets>
<Targets Include="T2">
<Project>C\D.csproj"</Project>
<DependsOnTargets>The targets T2 depends on</DependsOnTargets>
</Targets>
...
</ItemGroup>
<Target Name="T1" DependsOnTargets="The targets T1 depends on">
<MSBuild Projects="A\B.sln" Properties="Configuration=$(Configuration)" />
</Target>
<Target Name="T2" DependsOnTargets="The targets T2 depends on">
<MSBuild Projects="C\D.csproj" Properties="Configuration=$(Configuration)" />
</Target>
如您所见,A\B.sln
出现两次:
Project
部分中T1
的{{1}}元数据。ItemGroup
任务的Target
语句中。我想知道我是否可以删除第二个实例并将其替换为对目标的MSBuild
元数据的引用,该名称是否赋予Project
任务?
要求Target
元数据完全相同的问题。它被提及两次,就像(Targets.DependsOnTargets)
元数据一样。
感谢。
修改
我应该描述约束,解决方案必须满足这些约束:
%(Targets.Project)
来构建T1目标,我希望保持这种能力。msbuild file.proj /t:T1
属性对他们来说确实是必要的。答案 0 :(得分:0)
目标名称必须是固定值,因此您所拥有的内容不起作用。
另外,我建议不要在DependsOnTargets表达式中使用Batching Expressions。如果您不完全了解正在发生的事情,这可能会导致奇怪的行为。
在您的情况下,您可能只需创建一个“驱动程序”目标,该目标使用这些项目来执行构建。唯一困难的部分是您尝试执行的DependsOnTargets。我不确定你要做什么的细节,所以不能提出任何建议,但另一方面看看创建类似的目标。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Targets Include="T1">
<Project>A\B.sln"</Project>
<DependsOnTargets>The targets T1 depends on</DependsOnTargets>
</Targets> <Targets Include="T2">
<Project>C\D.csproj"</Project>
<DependsOnTargets>The targets T2 depends on</DependsOnTargets>
</Targets> ...
</ItemGroup>
<Target Name="Build">
<!--
This will be executed once for every unique value of Project in the
Target item group
-->
<MSBuild Projects="%(Targets.Project)"
Properties="Configuration=$(Configuration)"
</Target>
</Project>