Visual studio msbuild-使用属性或项存储值之间的差异

Visual studio msbuild-使用属性或项存储值之间的差异,visual-studio,visual-studio-2013,msbuild,Visual Studio,Visual Studio 2013,Msbuild,在我现有的MSBuildXML中,我有 <Exec EchoOff="true" StandardOutputImportance="low" StandardErrorImportance="low" IgnoreExitCode="true" ConsoleToMSBuild="true" Command=' "$(CompilerExe)" ^

在我现有的
MSBuild
XML中,我有

    <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\u cppdeps
被转换为
;有没有功能上的原因

属性
相比,您可以对
执行更多操作吗?还是仅仅是一种风格

与属性相比,您可以对项目执行更多操作吗?还是仅仅是一种风格

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

项目功能

属性函数

因此,项和属性具有不同的功能。根据描述:

MSBuild属性和项都用于将信息传递给 任务、评估条件和存储可引用的值 在整个项目文件中

我们可以将
属性
转换为
项目
项目
转换为
属性
,在这种情况下,我们可以对
项目
执行比
属性
更多的操作,或者对
项目`使用属性
的函数。例如,将项元数据设置为MSBuild脚本中的属性:

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

@(输出目录)
之后,我们可以对
使用
属性
函数

有关详细信息,请参阅此链接:

因此,您的理解是正确的,“您可以对项目和属性执行更多操作,而不仅仅是样式。”

希望这有帮助