msbuild - 使用 属性 或 ITEM 存储值的区别

msbuild - difference between using PROPERTY or ITEM to store values

在我现有的MSBuildXML中,我有这个

    <Exec
        EchoOff="true"
        StandardOutputImportance="low"
        StandardErrorImportance="low"
        IgnoreExitCode="true"
        ConsoleToMSBuild="true" 
        Command='
            "$(CompilerExe)" ^
                $(HWProcessor) ^
                $(IncludeDirs) ^
                $(CompilerOptions) ^
                $(CompileDefines) ^
                "$(CPPFILE)" ^
                -MM
    '>
        <Output TaskParameter="ConsoleOutput" PropertyName="output_cppdeps"/>
        <Output TaskParameter="ExitCode" PropertyName="exitcode_cppdeps"/>
    </Exec>

  <ItemGroup>
    <Item_output_cppdeps Include="$(output_cppdeps)" />
  </ItemGroup>

任务Exec执行后,输出output_cppdeps转化为Item;有功能上的原因吗?

Property 相比,您可以在 Item 上执行更多操作吗?还是只是风格?

Are there more operations you can do on an Item vs a Property? Or is it simply style?

在回答这个问题之前,我们需要了解PropertyItem的功能。

项目功能https://msdn.microsoft.com/en-us/library/ee886422.aspx

属性 函数: https://msdn.microsoft.com/en-us/library/dd633440.aspx

所以Item和属性有不同的功能。根据描述Comparing Properties and Items

MSBuild properties and items are both used to pass information to tasks, evaluate conditions, and store values that can be referenced throughout the project file.

我们可以将Property转换为Item或将Item转换为Property,在这种情况下,我们可以对Item VS a进行更多操作Property 或使用 属性s function onItem`。例如,将项目元数据设置为 MSBuild 脚本中的属性:

<ItemGroup>  
  <OutputDir Include="KeyFiles\;Certificates\" />  
</ItemGroup>  
<PropertyGroup>  
  <OutputDirList>@(OutputDir)</OutputDirList>  
</PropertyGroup> 

之后,我们可以在 Item.

上使用 property 函数

参考这个link了解详情:Comparing Properties and Items

所以您的理解是正确的,“与 属性 相比,您可以对 Item 执行更多操作,这不仅仅是样式

希望这对您有所帮助。