2013-07-31 14 views
0

我目前必須有兩個獨立的屬性組,只有兩個不同的屬性組,它們之間根據條件被設置爲具有一個或另一個觸發器。下面是我有:MSBuild中的屬性組內部是否存在「if」類​​型語句?

<!--CAME FROM TEAMBUILD--> 
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' != 'Debug|AnyCPU' AND '$(Configuration)|$(Platform)' != 'Release|AnyCPU' AND '$(BuildingInsideVisualStudio)' != 'true' "> 
    <PreBuildEvent> 
    </PreBuildEvent> 
    <PostBuildEvent> 
     set MAGE="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\mage.exe" 
     set APPFILE=$(TargetDir)$(TargetName).application 
     set MANIFEST=$(TargetPath).manifest 
     set CERT=$(ProjectDir)$(TargetName).pfx 
     set PROJECTNAME=$(TargetName) 
     set CONFIGURATION=$(ConfigurationName) 
     set TARGETDIR=$(TargetDir) 
     set TEAMBUILD=$True 
     Powershell -File "$(ProjectDir)POSTBUILD.ps1" 
    </PostBuildEvent> 
    </PropertyGroup> 

    <!--CAME FROM PUBLISH COMMAND--> 
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' != 'Debug|AnyCPU' AND '$(Configuration)|$(Platform)' != 'Release|AnyCPU' AND '$(BuildingInsideVisualStudio)' == 'true' "> 
    <PreBuildEvent> 
    </PreBuildEvent> 
    <PostBuildEvent> 
     set MAGE="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\mage.exe" 
     set APPFILE=$(TargetDir)$(TargetName).application 
     set MANIFEST=$(TargetPath).manifest 
     set CERT=$(ProjectDir)$(TargetName).pfx 
     set PROJECTNAME=$(TargetName) 
     set CONFIGURATION=$(ConfigurationName) 
     set TARGETDIR=$(TargetDir) 
     set TEAMBUILD=$False 
     Powershell -File "$(ProjectDir)POSTBUILD.ps1" 
    </PostBuildEvent> 
    </PropertyGroup> 

有沒有一種方法來設置基礎上,後生成事件裏面的$(BuildingInsideVisualStudio)值teambuild價值? 喜歡的東西

如果($(BuildingInsideVisualStudio)== '真') 集TEAMBUILD = $真

或 甚至像 set TEAMBUILD = $$(BuildingInsideVisualStudio)

+0

[This](http://msdn.microsoft.com/en-us/library/ms164307.aspx)或許? –

+0

嗯......可能。我得看看它。感謝您的建議。 –

回答

3

您已經在使用它:Condition。您只需提取額外的步驟即可創建將用作TEAMBUILD值的屬性。例如:

<PropertyGroup Condition='$(BuildingInsideVisualStudio)' != 'true' "> 
    <TeamBuildValue>FALSE</TeamBuildValue> 
</PropertyGroup> 

<PropertyGroup Condition='$(BuildingInsideVisualStudio)' == 'true' "> 
    <TeamBuildValue>TRUE</TeamBuildValue> 
</PropertyGroup> 

<PropertyGroup> 
    <PreBuildEvent> 
    </PreBuildEvent> 
    <PostBuildEvent> 
    ... 
    set TEAMBUILD=$(TeamBuildValue) 
    ... 
    </PostBuildEvent> 
</PropertyGroup> 
+0

Oooooh,我不知道我可以做那樣的事情。我對MSBuild仍然很陌生。感謝一堆,這正是我需要的! –

0

我可能會嘗試選擇/否則.......而不是== = 只是一個偏好! 因爲有一天......你可能有第三種選擇。

<Choose> 
    <When Condition=" '$(Computername)'=='MySuperComputer01' ">    
     <PropertyGroup> 
      <FavoriteFood>Peanuts</FavoriteFood> 
      <FavoriteColor>Red</FavoriteColor> 
     </PropertyGroup> 
    </When> 

    <When Condition=" '$(Computername)'=='MySuperComputer02' "> 

    <PropertyGroup> 
      <FavoriteFood>Apples</FavoriteFood> 
      <FavoriteColor>Yellow</FavoriteColor> 
     </PropertyGroup> 

    </When> 

    <Otherwise> 

     <PropertyGroup> 
      <FavoriteFood>CrackersDefault</FavoriteFood> 
      <FavoriteColor>OrangeDefault</FavoriteColor> 
     </PropertyGroup>   

    </Otherwise> 

</Choose>