MS Visual Studio 2013。
When
和ItemGroup
元素都可以拥有Condition
属性(正如我在MSDN中看到的那样)。但是我得到了不同的结果。
当$(CAD_Year)
是2015年时,我预计AcRibbon
将 引用到我的项目中:
<ItemGroup Condition= "'$(CAD_Year)' < '2010'" >
<Reference Include="AcRibbon">
<HintPath>$(CAD_SDK_Location)\$(Inc)\AcRibbon.dll</HintPath>
<Private>False</Private>
</Reference>
</ItemGroup>
但是我总是在解决方案浏览器中找到AcRibbon
的未解决的引用。
但是这个变种很好用:
<Choose>
<When Condition= "'$(CAD_Year)' < '2010'">
<ItemGroup>
<Reference Include="AcRibbon">
<HintPath>$(CAD_SDK_Location)\$(Inc)\AcRibbon.dll</HintPath>
<Private>False</Private>
</Reference>
</ItemGroup>
</When>
</Choose>
在这种情况下,仅在AcRibbon
小于2010时引用$(CAD_Year)
。
为什么我得到不同的结果?
答案 0 :(得分:17)
我在MSDN中找到答案here:
虽然条件导入语句在命令行MSBuilds中有效, 它们不能与集成的Visual Studio中的MSBuild一起使用 开发环境(IDE)。条件导入由。评估 使用时设置的配置和平台值 项目已加载。如果随后进行了需要更改的更改 例如,重新评估项目文件中的条件 更改平台,Visual Studio重新评估条件 属性和项目,但不是导入。因为导入 如果不重新评估条件,则跳过导入。要解决 这样,将条件导入放在.targets文件中或将代码放入 条件块,例如选择元素(MSBuild)块。
我认为ItemGroup
元素也是如此......