MS Visual Studio 2013.Почему атрибут `Condition` не работает для элемента` ItemGroup`?
Оба 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>
Но я получаю неразрешенный ссылку в браузере Solution для 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 Почему я получаю разные результаты?
ли в ItemGroup в 1-й пробе глобальной (определяется вне любой цели)? Если это так, возможной причиной является порядок оценки условий. Условие глобальной ItemGroup вычисляется до любого целевого запуска. Условие локальной ItemGroup рассчитывается при исходном целевом прогоне. Глобальные свойства вычисляются перед любыми предметными группами и целями. – Nikerboker
Оба являются глобальными. –
Вы уверены, что это не сработало? Visual Studio не очень хорошо демонстрирует условные ссылки при изменении конфигураций сборки, особенно если разные конфигурации компоновки ссылаются на объекты с тем же именем. Единственный способ проверить, работает ли он на самом деле или нет, - это построить его. Иногда вы получаете крест в обозревателе решений на изворотливой ссылке - безопасно оставить его в покое. –