代码之家  ›  专栏  ›  技术社区  ›  Tim Long

如何根据GitVersion属性命名WiX安装程序项目的输出?

  •  12
  • Tim Long  · 技术社区  · 6 年前

    我最近开始使用 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

    我从 this answer ,其中引用 this blog post . 这个 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"
    }
    

    所以我想看到的最后一个文件名是:

    在GitVersion文档中,它说我需要确保 GitVersion.GetVersion 生成任务已执行,在此之后,我应该能够从名为 $(GitVersion_FullSemVer) .

    GitVersionTask GitVersion.GetVersion版本 任务,然后我想我可以清楚地找到获得所需输出名称的方法。

    2 回复  |  直到 6 年前
        1
  •  4
  •   Tim Long    6 年前

    我想出来了。我一开始是对的。不需要手动执行 GitVersion.GetVersion GitVersionTask NuGet包安装在WiX项目中。它不起作用的原因是我试图在设置GitVersion的属性之前使用它们。

    所以,首先要创建几个属性来禁用一些不需要的 GitVersion

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

    我们不能简单地改变现状 OutputName 属性,因为它是在任何任务(包括 吉特版本 属性,因为 目标尚未执行。相反,我们必须在构建目标中加入一些逻辑,显而易见的候选者是 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>
    

    这里我们使用 输出名称 TargetName , TargetFileName TargetPath 将在生成过程的其余部分中使用的属性。这是因为 建造前 任务保证在生成任何输出文件之前执行,因此在此之前将设置所有Target*属性。

        2
  •  1
  •   koolkoda    6 年前

    我的方法是这样的:

    将以下内容添加到主程序集项目,而不是wix项目

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

    然后用wix项目中的这个示例替换BeforeBuild目标

    <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>
    

    解决方案增加了 属性设置为运行GetVersionTask后的文本文件。然后在wix项目中使用这些数据来控制msi文件的版本。