Msbuild 如何在内联任务中编辑或添加属性

Msbuild 如何在内联任务中编辑或添加属性,msbuild,Msbuild,我需要使用属性调用msbuild任务,只能在运行时计算其名称。我试着用这个脚本来做 Main.xml 我期望这个输出: AAA = 123;BBB=456; BBB = AAA = 123; BBB = 456; 如果希望内联任务生成多个项(与其他语言中的数组或列表等效的msbuild),则应该这样声明,而不是使用属性(即单个键/值对)。这在一些内联任务中有介绍,但是它使用成熟的Itaskitem,而仅仅使用字符串数组就可以了。因此: 从内联任务输出一个System.String[]

我需要使用属性调用msbuild任务,只能在运行时计算其名称。我试着用这个脚本来做

Main.xml

我期望这个输出:

AAA = 123;BBB=456;
BBB =
AAA = 123;
BBB = 456; 

如果希望内联任务生成多个项(与其他语言中的数组或列表等效的msbuild),则应该这样声明,而不是使用属性(即单个键/值对)。这在一些内联任务中有介绍,但是它使用成熟的Itaskitem,而仅仅使用字符串数组就可以了。因此:

  • 从内联任务输出一个
    System.String[]
  • 使用
    ItemName=
  • 使用
    @()
    表示法将该项传递给MSbuild任务(这是它所期望的)
代码:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0" DefaultTargets="Make">

  <UsingTask TaskName="GetVars" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">        
    <ParameterGroup>
      <Result ParameterType="System.String[]" Output="true"/>
    </ParameterGroup>
    <Task>
      <Code Type="Fragment" Language="cs">
        <![CDATA[
          this.Result = new System.String[]{"AAA=123", "BBB=456"};
        ]]>
      </Code>
    </Task>
  </UsingTask>

  <Target Name="Make">
    <GetVars>
      <Output TaskParameter="Result" ItemName="Vars"/>
    </GetVars>
    <MSBuild Projects="$(MSBuildThisFile)" Targets="Show" Properties="@(Vars)"/>
  </Target>

  <Target Name="Show">
    <Message Text="AAA = $(AAA)"/>
    <Message Text="BBB = $(BBB)"/>
  </Target>
</Project>

请提供一个示例,以便其他人可以尝试代码的相关部分。无论如何,如果我正确理解您想要的是什么,这是非常标准的msbuild,并且在内联任务的文档中也有介绍:。简而言之:如果您想要一个项而不是一个属性,那么输出一个数组而不是一个字符串,并使用ItemName=“Vars”。后来我看了一下这个概念
AAA = 123;
BBB = 456; 
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0" DefaultTargets="Make">

  <UsingTask TaskName="GetVars" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">        
    <ParameterGroup>
      <Result ParameterType="System.String[]" Output="true"/>
    </ParameterGroup>
    <Task>
      <Code Type="Fragment" Language="cs">
        <![CDATA[
          this.Result = new System.String[]{"AAA=123", "BBB=456"};
        ]]>
      </Code>
    </Task>
  </UsingTask>

  <Target Name="Make">
    <GetVars>
      <Output TaskParameter="Result" ItemName="Vars"/>
    </GetVars>
    <MSBuild Projects="$(MSBuildThisFile)" Targets="Show" Properties="@(Vars)"/>
  </Target>

  <Target Name="Show">
    <Message Text="AAA = $(AAA)"/>
    <Message Text="BBB = $(BBB)"/>
  </Target>
</Project>
Show:
  AAA = 123
  BBB = 456