MSBuild无法正确评估属性

时间:2020-09-09 10:47:43

标签: visual-studio msbuild

我有一个ItemGroup,它定义了多个值,这些值以后应写入文件中:

<ItemGroup>
    <_SomeValue Include="SomeInclude">
        <_Parameter1>%(PrintMe)</_Parameter1>
    </_SomeValue>
</ItemGroup>

PrintMe是先前定义的。其值应最后打印。

要写入文件的行是这样构建的:

<ItemGroup>
    <_LinesToWrite Include="Some First Line" />
    <_LinesToWrite Include="%(_SomeValue._Parameter1)" />
</ItemGroup>

然后写成:

<WriteLinesToFile File="$(TheFile)" Lines="@(_LinesToWrite)" />

问题在于文件的末尾不包含PrintMe的值,而是文字字符串%(PrintMe)。 这意味着行<_LinesToWrite Include="%(_SomeValue._Parameter1)" />不评估_Parameter1中的属性,而是打印其文字内容。我该如何更改?

1 个答案:

答案 0 :(得分:2)

MSBuild无法正确评估属性

MSBuild 并行读取each metadata ,这意味着它是同时完成的,因此第一个metadata的值不能为读另一个metadata

因此,如果要在元数据之间分配值,则必须指定顺序。例如,放置另一个以将第一个元数据读入目标。

注意:%读取一个元数据,并且该元数据应与项目名称同时显示。

例如

<ItemGroup>
    <FirstValue Include="FirstValue">
      <PrintMe>i am print me</PrintMe>
    </FirstValue>
 </ItemGroup>

要读取PrintMe的值,应使用%(FirstValue.PrintMe)

请参阅此内容,在我这一边,它可以打印PrintMe项元数据的值。

<ItemGroup>
        <FirstValue Include="FirstValue">
            <PrintMe>i am print me</PrintMe>
        </FirstValue>
</ItemGroup>
    
  <Target Name="test123" AfterTargets="Build">
      <ItemGroup>
          <_SomeValue Include="SomeInclude">
              <_Parameter1>%(FirstValue.PrintMe)</_Parameter1>
          </_SomeValue>
      </ItemGroup>
      <ItemGroup>
          <_LinesToWrite Include="Some First Line" />
          <_LinesToWrite Include="%(_SomeValue._Parameter1)" />
      </ItemGroup>
        
      <Message Importance="high" Text="%(_SomeValue._Parameter1)">
    </Message>
    <WriteLinesToFile File="test.txt" Lines="@(_LinesToWrite)">
    </WriteLinesToFile>
  </Target>
  

enter image description here

相关问题