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)。为什么我会得到不同的结果?
发布于 2015-03-05 09:58:41
我在MSDN 这里中找到了答案
虽然条件导入语句在命令行MSBuilds中工作,但它们在Visual集成开发环境(IDE)中不使用MSBuild。条件导入是通过使用加载项目时设置的配置和平台值来计算的。如果随后进行的更改需要重新计算项目文件中的条件(例如,更改平台),则Visual将重新评估属性和项的条件,而不是导入条件。由于未重新计算导入条件,因此将跳过导入。要解决这个问题,请将条件导入放在.targets文件中,或者将代码放在条件块中,例如选择元素(MSBuild)块。
我认为ItemGroup元素也是如此.
https://stackoverflow.com/questions/28851338
复制相似问题