Преобразуйте строку в int и увеличивайте последнюю цифру только для номера сборки в TFS.

Часть элемента MajorUpgrade имеет атрибут AllowSameVersionUpgrades , значение по умолчанию no.

Значение «Когда установлено значение« нет »(по умолчанию), установка продукта с той же версией и кодом обновления (но с другим кодом продукта) разрешена и обрабатывается MSI как два продукта. Если установлено« да », WiX устанавливает атрибут msidbUpgradeAttributesVersionMaxInclusive, который сообщает MSI относиться к продукту с той же версией, что и к основному обновлению. "

Проверьте этот атрибут и посмотрите, помогает ли эта проблема. Лучшая практика заключается в том, чтобы изменить версию на все msis и комплект, это делается автоматически частью конвейера CI / CD для выпуска продукта.

1
задан mklement0 26 March 2019 в 03:08
поделиться

1 ответ

Удивительно, что тип System.Version не поддерживает методы приращения компонентов номера версии (как и тип PowerShell Core-only System.Management.Automation.SemanticVersion ). ). [1 110]

Вот решение PSv5 +:

$versionString = '1.2.0'

$version = [version] $versionString

$versionStringIncremented = [string] [version]::new(
  $version.Major,
  $version.Minor,
  $version.Build + 1
)

# $versionStringIncremented now contains '1.2.1'

Если вы хотите обернуть это в функцию , которая позволяет увеличивать любой из компонентов , в то же время устанавливая все нижние компоненты на 0 или, в случае .Revision, до неопределенного (сообщается как -1):

function Increment-Version {
  param(
    [Parameter(Mandatory)]
    [version] $Version
    ,
    [ValidateSet('Major', 'Minor', 'Build', 'Revision')]
    [string] $Component = 'Revision'
  )

  $useRevision = $Version.Revision -ne -1 -or $Component -eq 'Revision'

  $Major, $Minor, $Build, $Revision =
    $Version.Major, $Version.Minor, $Version.Build, $Version.Revision

  switch ($Component) {
    'Major' { $Minor = $Build = 0 }
    'Minor' { $Build = 0 }
  }

  Set-Variable $Component (1 + (Get-Variable -ValueOnly $Component))

  if ($useRevision) {
    [version]::new(
      $Major,
      $Minor,
      $Build,
      $Revision
    )
  } else {
    [version]::new(
      $Major,
      $Minor,
      $Build
    )
  }

}

Ваша команда затем упростится до:

# -> '1.2.1'
$versionStringIncremented = [string] (Increment-Version 1.2.0 -Component Build)

# -> '1.3.0'
$versionStringIncremented = [string] (Increment-Version 1.2.7 -Component Minor)
0
ответ дан mklement0 26 March 2019 в 03:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: