MS Visual Studio 2013Warum funktioniert das Attribut `Condition` nicht für das Element` ItemGroup`?
Sowohl When
und ItemGroup
Elemente können das Condition
Attribut haben (wie ich in MSDN). Aber ich bekomme andere Ergebnisse.
Wenn $(CAD_Year)
ist 2015 erwarte ich, dass die AcRibbon
wird nicht mein Projekt referensed:
<ItemGroup Condition= "'$(CAD_Year)' < '2010'" >
<Reference Include="AcRibbon">
<HintPath>$(CAD_SDK_Location)\$(Inc)\AcRibbon.dll</HintPath>
<Private>False</Private>
</Reference>
</ItemGroup>
Aber ich habe nicht aufgelösten Verweis im Solution Browser für die AcRibbon
immer.
Aber diese Variante funktioniert:
<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>
In diesem Fall
die AcRibbon
wird nur referenziert, wenn $(CAD_Year)
weniger als 2010. Warum ich die verschiedenen Ergebnisse zu erzielen?
die ItemGroup in der ersten Probe global ist (außerhalb jedes Ziel definiert ist)? Wenn dies der Fall ist, ist ein möglicher Grund die Bedingungsevaluierungsreihenfolge. Die Bedingung einer globalen ItemGroup wird vor jedem Ziellauf berechnet. Die Bedingung einer lokalen ItemGroup wird beim übergeordneten Ziellauf berechnet. Globale Eigenschaften werden vor allen ItemGroups und Zielen berechnet. – Nikerboker
Beide sind global. –
Sind Sie sicher, dass es nicht funktioniert? Visual Studio ist nicht sehr gut darin, bedingte Referenzen anzuzeigen, wenn Sie Build-Konfigurationen ändern, insbesondere wenn die verschiedenen Build-Konfigurationen auf Objekte mit demselben Namen verweisen. Der einzige Weg zu testen, ob es tatsächlich funktioniert oder nicht, ist es zu bauen. Manchmal erhalten Sie im Solution Explorer auf der zwielichtigen Referenz ein Kreuz - es ist sicher, es in Ruhe zu lassen. –