MSBuild 未正确评估 属性
MSBuild does not evaluate property correctly
我有一个 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
中的 属性 而是打印其文字内容。我该如何更改?
MSBuild does not evaluate property correctly
MSBuild并行读取each metadata,也就是说是同时完成的,所以第一个 metadata
无法在另一个 metadata
中读取。
因此,如果要在元数据之间赋值,必须指定顺序。比如再放一个读取第一个元数据到一个target中。
注意:%
读取的是一个元数据,并且要同时包含项目的名称。
举个例子,
<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>
我有一个 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
中的 属性 而是打印其文字内容。我该如何更改?
MSBuild does not evaluate property correctly
MSBuild并行读取each metadata,也就是说是同时完成的,所以第一个 metadata
无法在另一个 metadata
中读取。
因此,如果要在元数据之间赋值,必须指定顺序。比如再放一个读取第一个元数据到一个target中。
注意:%
读取的是一个元数据,并且要同时包含项目的名称。
举个例子,
<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>