为什么`Condition`属性不适用于`ItemGroup`元素?

And*_*man 15 msbuild visual-studio visual-studio-2013

MS Visual Studio 2013.

两者WhenItemGroup元素都可以具有Condition属性(正如我在MSDN中看到的那样).但我得到了不同的结果.

如果$(CAD_Year)是2015年,我预计AcRibbon不会 referensed到我的项目:

<ItemGroup Condition= "'$(CAD_Year)' &lt; '2010'" >    
  <Reference Include="AcRibbon">
    <HintPath>$(CAD_SDK_Location)\$(Inc)\AcRibbon.dll</HintPath>
    <Private>False</Private>
  </Reference>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

但是我AcRibbon总是在解决方案浏览器中得到未解决的参考.

但这个变种工作正常:

<Choose>
  <When Condition= "'$(CAD_Year)' &lt; '2010'">
    <ItemGroup>
      <Reference Include="AcRibbon">
        <HintPath>$(CAD_SDK_Location)\$(Inc)\AcRibbon.dll</HintPath>
        <Private>False</Private>
      </Reference>
    </ItemGroup>
  </When>
</Choose>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,AcRibbon只有在$(CAD_Year)低于2010年才会被引用.为什么我得到不同的结果?

And*_*man 18

我发现在MSDN的答案在这里:

虽然条件导入语句在命令行MSBuild中有效,但它们在Visual Studio集成开发环境(IDE)中不能与MSBuild一起使用.通过使用加载项目时设置的配置和平台值来评估条件导入.如果随后进行了需要重新评估项目文件中条件的更改(例如,更改平台),Visual Studio将重新评估属性和项目的条件,但不会重新评估导入.由于未重新评估导入条件,因此将跳过导入.要解决此问题,请将条件导入放在.targets文件中,或将代码放在条件块中,例如选择元素(MSBuild)块.

我认为ItemGroup元素也是如此......