Mam niestandardową regułę kompilacji w VS2010 dla mojego projektu VC++. Zgodnie z tą zasadą chciałbym zezwolić użytkownikom na dodawanie złożonych warunków określających, czy plik jest przetwarzany.Jak mogę odsłonić "Warunki" MSBuild w VS2010 (dla vC++)
Należy to również ocenić w czasie realizacji celu, a nie w "Warunku" samego elementu (z uwagi na fakt, że tylko projekt "aplikacja" może go przetworzyć i musi go przetworzyć z ustawieniami projektu "aplikacja", a nie zależnymi projektami).
Próbowałem dodać pole niestandardowe do obiektu, a następnie po prostu usunąć elementy z grupy w czasie wykonywania. np.
<ItemGroup>
<MyItemType Remove="@(MyItemType)" Condition="!(%(MyItemType.IncludeCondition))" />
</ItemGroup>
Niestety, to daje mi błąd:
błąd MSB4113: "(% (MyItemType.IncludeCondition))" określono warunek jest " 'testfilename1' == 'testfilename2' lub fałszywe!" zamiast wartości boolowskiej.
(Stan oryginalny wyraz w „% (MyItemType.IncludeCondition)” był '%(Filename)' == 'testfilename2' or $(TestBooleanFalse)
)
Wydaje się, że MSBuild nie oceni zawartości metadanych elementu na wartość logiczną (co wydaje się dobre praktyki większość okoliczności, po prostu nie ten).
Czy mimo to mogę uzyskać MSbuild, aby rzeczywiście ocenić metadane na wartość boolowską, lub czy istnieje inna metoda, której można użyć do uzyskania tego samego wyniku?
P.S. miałem krótkie spojrzenie przez MSBuild Property Functions, ale nie dostrzegł niczego, co mogłoby uruchomić kod logiczną oceny MSBuild nad wejściem funkcja)
bardzo okrojone przykładem projektu MSBuild ukazującą kwestia, dzięki uprzejmości Lanrokin:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<ItemGroup>
<MyItemType Include="item1.ext1" />
<MyItemType Include="item1.ext2" />
</ItemGroup>
<Target Name="SpecifyConditions">
<ItemGroup>
<MyItemType>
<IncludeCondition>'%(Filename)%(Extension)' == 'item1.ext1'</IncludeCondition>
</MyItemType>
</ItemGroup>
</Target>
<Target Name="Build" DependsOnTargets="SpecifyConditions">
<Message Importance="high" Text="@(MyItemType)" Condition="%(MyItemType.IncludeCondition)" />
</Target>
</Project>
próbowano edytować posta, ale została ona odrzucona. Sprawdź, czy jest coś, co chcesz zrobić do pracy http://pastebin.com/nkdz80y5 i rozważ dodanie tej próbki do pytania. – Lanorkin
@Lanorkin - Dzięki, że w podanym przykładzie pojawił się drobny błąd, ale pokazuje problem I ' m mając. (Mam nadzieję, że ludzie nie tylko odpowiedzą i powiedzą, aby zmienić "ItemGroup" w "SpecifyConditions" na "Remove" z warunkiem określonym jako warunek deklaracji "MyItemType"). –