2013-07-31 12 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>