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

时间:2015-03-04 09:54:35

标签: visual-studio visual-studio-2013 msbuild

MS Visual Studio 2013。

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

$(CAD_Year)是2015年时,我预计AcRibbon 引用到我的项目中:

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

但是我总是在解决方案浏览器中找到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>

在这种情况下,仅在AcRibbon小于2010时引用$(CAD_Year)。 为什么我得到不同的结果?

1 个答案:

答案 0 :(得分:17)

我在MSDN中找到答案here

  

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

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