2017-02-10 64 views
1

我有一個MSBuild的腳本,只包含的PropertyGroup:DefaultVariables.msbuildMSBuild的覆蓋性能值與進口

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <!-- default values if nothing is set in Main.proj --> 
    <PropertyGroup> 
    <ProjectName Condition="'$(PublishService)'==''">DefaultService</ProjectName> 
    </PropertyGroup> 
</Project> 

的PublishService可以改變取決於環境。 我也有一樣的是上面的腳本一個Variables.msbuild,除了服務名稱:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <!-- default values if nothing is set in Main.proj --> 
    <PropertyGroup> 
    <ProjectName Condition="'$(PublishService)'==''">ErpService</ProjectName> 
    </PropertyGroup> 
</Project 

我的主要構建腳本:BuildMsi.msbuild導入DefaultVariables.msbuild並具有來電微星目標CreateEnvironmentSpecificInstaller。 MSBuild的

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="CreateInstaller"> 

    <PropertyGroup> 
    <BaseDir Condition="$(BaseDir)==''">$(MSBuildProjectDirectory)</BaseDir> 
    </PropertyGroup> 

    <Import Project="DefaultVariables.msbuild" /> 

    <!-- Something else --> 
    <Target Name="CreateEnvironmentSpecificInstaller" DependsOnTargets="$(SpecificBuildSteps)"> 
    <MSBuild Projects="$(RedistDir)\Framework\Msi.msbuild" Targets="CreateBatchScripts" StopOnFirstFailure="true" Properties="Configuration=$(Configuration)" RebaseOutputs="true" /> 
    </Target> 

    <Target Name="CreateInstaller" DependsOnTargets="PrintVersion;$(GenericBuildSteps)"> 
    <MSBuild Condition=" '$(EnvironmentName)' == '**AllEnvironments**' " Projects="$(BaseDir)\$(BtsDeploymentFrameworkDir)\BuildMsi.msbuild" Targets="CreateEnvironmentSpecificInstaller" StopOnFirstFailure="true" 
     Properties="Configuration=$(Configuration);" RebaseOutputs="true" /> 
    <CallTarget Targets="RemoveGeneratedEnvironmentSettings" /> 
    </Target> 
</Project> 

在Msi.msbuild劇本我添加導入到Variables.msbuild劇本,但在此之後PublishService仍是DefaultService:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="CreateInstaller"> 

    <Import Project="Variables.msbuild" /> 
    <Target Name="CreateBatchScripts"> 
    <Message Text="PublishService = $(PublishService)" /> 
    </Target> 
</Project> 

如何在運行時覆蓋此屬性值?

回答

1

首先,你永遠不會給PublishService價值。我在DefaultVariables.msbuild假設你想要做的是

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <!-- default values if nothing is set in Main.proj --> 
    <PropertyGroup> 
    <PublishService> Condition="'$(PublishService)'==''">DefaultService</PublishService> 
    </PropertyGroup> 
</Project> 

然後,我建議你也重命名Variables.msbuild屬性和刪除的條件Condition="'$(PublishService)'==''。正如您在DefaultVariables.msbuild中給該屬性設定了一個默認值,該條件將不會被滿足,因此該值不會被更改。

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <PublishService>ErpService</PublishService> 
    </PropertyGroup> 
</Project>