是否可以从MSBuild中的目标实现中引用目标的元数据?

是否可以从MSBuild中的目标实现中引用目标的元数据?,msbuild,metadata,Msbuild,Metadata,我的msbuild目标文件包含以下部分: <ItemGroup> <Targets Include="T1"> <Project>A\B.sln"</Project> <DependsOnTargets>The targets T1 depends on</DependsOnTargets> </Targets> <Targets Include="T2"> <

我的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“
目标T1取决于
C\D.csproj“
目标T2取决于
...
如您所见,
A\B.sln
出现两次:

  • 作为
    ItemGroup
    部分中
    T1
    Project
    元数据
  • 在传递给
    MSBuild
    任务的
    Target
    语句中
  • 我想知道是否可以删除第二个实例并将其替换为对目标的
    项目
    元数据的引用,该
    目标
    任务的名称是什么

    对于
    (Targets.DependsOnTargets)
    元数据,会提出完全相同的问题。它与
    %(Targets.Project)
    元数据一样被提到了两次

    谢谢

    编辑:

    我可能应该描述解决方案必须满足的约束:

  • 我希望能够轻松地构建单个项目。今天,我只需执行
    msbuild file.proj/t:T1
    即可构建T1目标,我希望保留此功能
  • 我想强调的是,有些项目依赖于其他项目,因此
    DependsOnTargets
    属性对它们来说是非常必要的

  • 目标名称必须是固定值,因此这里的名称不起作用

    我还建议不要在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>
    
    
    A\B.sln“
    目标T1取决于
    C\D.csproj“
    目标T2取决于
    ...
    
    嗨,谢谢你的及时回复。我修改了我的问题,澄清了几点。顺便说一句,我已经在使用你建议的清理目标的结构,因为我通常清理所有的项目。但是我需要一种构建单个项目的能力,我不知道您的解决方案如何允许我这样做,更不用说它忽略依赖关系了。