我也有类似的问题。见:
Scope and order of evaluation of Items in MsBuild
.
对于4.0之前的MSBuild,不能通过同时对其自身的已知元数据进行批处理来声明项和设置其某些元数据。
不要忘记,在解析开始时,目标之外的项会被计算一次。因此,不能在目标外部使用4.0之前的MSBuild进行批处理。因此,解决方法可以是将批处理部分(或整个声明放在目标中):
<Project ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<XsdFiles Include="App_Data\*.xsd">
<Generator>MSDataSetGenerator</Generator>
<SubType>Designer</SubType>
</XsdFiles>
<XssFiles Include="App_Data\*.xss" />
<XscFiles Include="App_Data\*.xsc" />
</ItemGroup>
<Target Name="PrintMetaData">
<ItemGroup>
<Xsd Include="@(XsdFiles)">
<LastGenOutput>%(XsdFiles.Filename).Designer.cs</LastGenOutput>
</Xsd>
<Xss Include="@(XssFiles)">
<DependentUpon>%(XssFiles.Filename).xsd</DependentUpon>
</Xss>
<Xsc Include="@(XscFiles)">
<DependentUpon>%(XscFiles.Filename).xsd</DependentUpon>
</Xsc>
</ItemGroup>
<Message Text="@(Xss->'%(DependentUpon)')"/>
</Target>
</Project>