2011-03-17 7 views
3

저는 MSBuild를 처음 사용하고 있으며 조건부 부품에서 PropertyGroup 항목을 작성하는 방법을 찾는 데 어려움이 있습니다. ; DEBUG; SomeFlag 경우 추적이되지 않을 경우 DEBUG_PARANOID을 떠나, true로 설정MSBuild의 ItemGroup에서 PropertyGroup 항목을 작성하는 방법은 무엇입니까?

<ItemGroup> 
    <CompilerDirective Include="DEBUG_PARANOID" Condition=" '$(SomeFlag)' == 'true' "/> 
    <CompilerDirective Include="DEBUG"/> 
    <CompilerDirective Include="TRACE"/> 
</ItemGroup> 

<PropertyGroup> 
    ... 
    <DefineConstants>@(CompilerDirective)</DefineConstants> 
    ... 
</PropertyGroup> 

내가 DEBUG_PARANOID로 표시하도록 정의 얻을 상수를 싶습니다 여기

내가 작동하지 않는,이 무엇 . 이것은 .csproj를위한 것입니다.

메시지 작업과 함께 @ (CompilerDirective)를 인쇄하면 작동합니다.

제 질문은이 작업을 PropertyGroup 항목 안에 만드는 방법입니다.

답변

6

위의 작품이 무엇입니까? 나는이 실행 :

<Target Name="Test"> 
    <ItemGroup> 
     <CompilerDirective Include="DEBUG_PARANOID" 
     Condition=" '$(SomeFlag)' == 'true' "/> 
     <CompilerDirective Include="DEBUG"/> 
     <CompilerDirective Include="TRACE"/> 
    </ItemGroup> 
    <PropertyGroup> 
    <DefineConstants>@(CompilerDirective)</DefineConstants> 
    </PropertyGroup> 
    <Message Text="$(DefineConstants)" /> 
</Target> 

을 적절한 출력 DEBUG있어, TRACE 또는 DEBUG_PARANOID, DEBUG, TRACE 을 속성 값에 따라 달라집니다. 이것이 당신에게 어떤 방식으로 작용하지 않습니까?

+0

글쎄, 어때? 내가 좋아하지 않는 이유는 내가 VS에서 빌드 속성을 살펴볼 때, 확장 목록이 아닌 @ (CompilerDirective)로 들어간다는 것입니다. . 나는 그것을 확대 할 것이라고 생각 했었는데 왜냐하면'USER _ $ (USERNAME.ToUpper())'를 확장했기 때문이다. 고마워! – scobi

관련 문제