2017-02-10 2 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> 

The 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, который вызывает к Msi. 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> 
Смежные вопросы