Установить свойство внутри пользовательской цели - PullRequest
0 голосов
/ 30 мая 2018

У меня есть решение, которое я хочу построить на CI-сервере, содержащем проекты с пользовательской целью, например:

<Target Name="CustomTarget">
  <PropertyGroup>
    <PackageOutputDir>C:\Repos\$(Configuration)</PackageOutputDir>
  </PropertyGroup>
</Target>

К сожалению, <PackageOutputDir> указан в разных местах для некоторых проектов, поэтому я хочуустановите его дважды.

На сервере CI я хочу установить это в другой каталог, используя /property: из двоичного файла msbuild, например:

msbuild my.sln /property:PackageOutputDir=$buildPath\ci-output;CustomTarget.PackageOutputDir=$buildPath\ci-output' does not set the value inside CustomTarget`.Поскольку я не контролирую источник, я должен передать значения с помощью командной строки.

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Измените

msbuild my.sln /property:PackageOutputDir=$buildPath\ci-output;CustomTarget.PackageOutputDir=$buildPath\ci-output

на

msbuild my.sln /property:PackageOutputDir=$buildPath\ci-output;PackageOutputDir=$buildPath\ci-output

По сути, отсутствует понятие области действия, когда речь идет о свойствах MSBuild, поэтому квалификатор CustomTarget. не нужен и саботирует намеченнуюприсвоение значения свойства.

0 голосов
/ 31 мая 2018

Можете ли вы переместить определение PropertyGroup за пределы цели?Если вы сделаете это, то значение, указанное в командной строке, перезапишет значение в определении вашей цели.

Например

<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">   
    <PropertyGroup>
      <PackageOutputDir>C:\Repos\$(Configuration)</PackageOutputDir>
    </PropertyGroup>

    <Target Name="CustomTarget"> 
        <Message Text="PackageOutputDir is: $(PackageOutputDir)" />
    </Target>
</Project>  

С аргументами

msbuild go.build / p: PackageOutputDir = "Hello World"

Будет производить "Hello World"

В качестве альтернативы, и хорошей практикой в ​​MSBuild всегда является определение ваших свойств как условных.

Следующий пример также выдаст "Hello World", поскольку свойство не будет оцениваться внутри цели, поскольку оно уже имеет значение из командной строки.

<Target Name="CustomTarget">
    <PropertyGroup>
        <PackageOutputDir Condition="'$(PackageOutputDir)' == ''">C:\Repos\$(Configuration)</PackageOutputDir>
    </PropertyGroup>
    <Message Text="PackageOutputDir is: $(PackageOutputDir)" />
</Target>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...