Как я могу назвать выходные данные из моего проекта установщика WiX на основе свойств GitVersion? - PullRequest
0 голосов
/ 11 сентября 2018

Я недавно начал использовать GitVersion для создания версий своих сборок, и мне это нравится!

Мне нравится создавать файл .msi, который отражает версию создаваемого продукта,До сих пор я использовал это в моем .wixproj файле:

  <!-- [TPL] name the output file to include the version from theLocalServer assembly -->
  <Target Name="BeforeBuild">
    <GetAssemblyIdentity AssemblyFiles="$(SolutionDir)BuildOutput\$(Configuration)\TA.DigitalDomeworks.Server.exe">
      <Output TaskParameter="Assemblies" ItemName="AssemblyVersions" />
    </GetAssemblyIdentity>
    <CreateProperty Value="$(OutputName).%(AssemblyVersions.Version)">
      <Output TaskParameter="Value" PropertyName="TargetName" />
    </CreateProperty>
    <CreateProperty Value="$(TargetName)$(TargetExt)">
      <Output TaskParameter="Value" PropertyName="TargetFileName" />
    </CreateProperty>
    <CreateProperty Value="$(TargetDir)$(TargetFileName)">
      <Output TaskParameter="Value" PropertyName="TargetPath" />
    </CreateProperty>
  </Target>

. В результате получается выходной файл с именем вроде:

TA.DigitalDomeworks.Installer.7.1.0.3.msi

Я нашел это решение от этого ответа , который ссылается на этот пост .7.1.0.3 происходит от версии основной сборки в сборке, которая, в свою очередь, GitVersion управляет версией во время ее собственной сборки.

Однако мне действительно хотелось бы использовать FullSemVer свойство, которое можно увидеть здесь:

C:\Users\Tim\source\repos\TA.DigitalDomeworks [release/7.1 ↑1 +0 ~1 -0 !]> gitversion
{
  "Major":7,
  "Minor":1,
  "Patch":0,
  "PreReleaseTag":"beta.3",
  "PreReleaseTagWithDash":"-beta.3",
  "PreReleaseLabel":"beta",
  "PreReleaseNumber":3,
  "BuildMetaData":"",
  "BuildMetaDataPadded":"",
  "FullBuildMetaData":"Branch.release/7.1.Sha.77fa2c96ed9b0f5ab162d07052ef094e8ccfc8c5",
  "MajorMinorPatch":"7.1.0",
  "SemVer":"7.1.0-beta.3",
  "LegacySemVer":"7.1.0-beta3",
  "LegacySemVerPadded":"7.1.0-beta0003",
  "AssemblySemVer":"7.1.0.3",
  "FullSemVer":"7.1.0-beta.3",
  "InformationalVersion":"7.1.0-beta.3+Branch.release/7.1.Sha.77fa2c96ed9b0f5ab162d07052ef094e8ccfc8c5",
  "BranchName":"release/7.1",
  "Sha":"77fa2c96ed9b0f5ab162d07052ef094e8ccfc8c5",
  "NuGetVersionV2":"7.1.0-beta0003",
  "NuGetVersion":"7.1.0-beta0003",
  "CommitsSinceVersionSource":3,
  "CommitsSinceVersionSourcePadded":"0003",
  "CommitDate":"2018-09-10"
}

Итак, окончательное имя файла, которое я хотел бы видеть:

TA.DigitalDomeworks.Installer-7.1.0-Beta.3.msi

В документации GitVersion говорится, что мне нужно убедиться, что задача сборки GitVersion.GetVersion выполнена, после чего я смогу получить полный SemVer из свойства сборкиназывается $(GitVersion_FullSemVer).

Однако я не уверен, как этого добиться в проекте WiX, поскольку установка пакета NuGet GitVersionTask, похоже, ничего не делает (в проектах C # все просто волшебноработает).Если бы я мог дойти до точки, где я могу выполнить задачу GitVersion.GetVersion, то я думаю, что я вижу свой путь к получению нужного имени выхода.

У кого-нибудь получилось?Или кто-нибудь может посоветовать, как к этому подойти?

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Я понял это.Я был на правильном пути, чтобы начать с.Нет необходимости вручную запускать GitVersion.GetVersion, это корректно обрабатывается MSBuild после установки пакета GitVersionTask NuGet в проекте WiX.Причина, по которой это не сработало, заключается в том, что я пытался использовать свойства GitVersion до того, как они были установлены.

Итак, во-первых, нужно создать пару свойств, которые отключают некоторые нежелательные действия GitVersion:

  <PropertyGroup>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    <WriteVersionInfoToBuildLog>false</WriteVersionInfoToBuildLog>
    <GenerateGitVersionInformation>false</GenerateGitVersionInformation>
  </PropertyGroup>

Мы не можем просто изменить свойство OutputName, поскольку оно устанавливается перед выполнением каких-либо задач (включая GitVersion задачи), поэтому, если мы попытаемся использовать там свойства GitVersion, они будутбыть пустым / неустановленным, потому что цели GitVersion еще не выполнены.Вместо этого мы должны поместить некоторую логику в цель сборки, очевидным кандидатом является цель BeforeBuild, которая обычно находится в конце файла проекта:

  <Target Name="BeforeBuild" AfterTargets="GetVersion">
    <CreateProperty Value="$(OutputName).$(GitVersion_SemVer)">
      <Output TaskParameter="Value" PropertyName="TargetName" />
    </CreateProperty>
    <CreateProperty Value="$(TargetName)$(TargetExt)">
      <Output TaskParameter="Value" PropertyName="TargetFileName" />
    </CreateProperty>
    <CreateProperty Value="$(TargetDir)$(TargetFileName)">
      <Output TaskParameter="Value" PropertyName="TargetPath" />
    </CreateProperty>
  </Target>

Здесь мы используем OutputNameсвойство как базовое имя и дополняет его требуемыми свойствами GitVersion, чтобы создать свойства TargetName, TargetFileName и TargetPath, которые будут использоваться в оставшейся части процесса сборки.Это работает, потому что задача BeforeBuild гарантированно будет выполнена перед созданием любого выходного файла, поэтому все свойства Target * будут установлены до этого.

0 голосов
/ 28 декабря 2018

Посмотрим, решит ли это вашу проблему

Мой подход звучит так:

Добавьте следующее в основной проект сборки, а не в проект wix

<Target Name="WriteVersionToFile" AfterTargets="GetVersion">
        <WriteLinesToFile File="$(OutputPath)version.txt" Lines="$(GitVersion_FullSemVer)" Overwrite="true" Encoding="Unicode" /> 
</Target>

Затем замените цель BeforeBuild на этот пример в своем проекте wix

<Target Name="BeforeBuild">
    <ReadLinesFromFile File="$(SolutionDir)BuildOutput\$(Configuration)\version.txt">  
        <Output TaskParameter="Lines" ItemName="Version" />  
    </ReadLinesFromFile>
    <CreateProperty Value="$(OutputName).$(Version)">
      <Output TaskParameter="Value" PropertyName="TargetName" />
    </CreateProperty>
    <CreateProperty Value="$(TargetName)$(TargetExt)">
      <Output TaskParameter="Value" PropertyName="TargetFileName" />
    </CreateProperty>
    <CreateProperty Value="$(TargetDir)$(TargetFileName)">
      <Output TaskParameter="Value" PropertyName="TargetPath" />
    </CreateProperty>
  </Target>

Решение добавляет свойство GitVersion_FullSemVer в текстовый файл после запуска GetVersionTask. Эти данные затем используются в проекте wix для управления версиями файла MSI.

...