MS Visual Studio 2013。
无论When
和ItemGroup
元素可以有Condition
属性(如我在MSDN看到)。但是我得到了不同的结果。
如果$(CAD_Year)
是2015年,我预计AcRibbon
将不会referensed到我的项目:
<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
仅当$(CAD_Year)
小于2010时才引用。为什么会得到不同的结果?
我发现在MSDN的答案在这里:
虽然条件导入语句在命令行MSBuilds中可以使用,但它们不能在Visual Studio集成开发环境(IDE)中与MSBuild一起使用。通过使用加载项目时设置的配置和平台值来评估条件导入。如果随后进行了需要重新评估项目文件中条件的更改(例如,更改平台),则Visual Studio将重新评估属性和项目的条件,而不是导入的条件。由于未重新评估导入条件,因此将跳过导入。若要解决此问题,请将条件导入放入.targets文件中,或将代码放入条件块中,例如“选择元素(MSBuild)”块。
我认为这对ItemGroup
元素也是正确的...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句