首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据WiX属性命名GitVersion安装程序项目的输出?

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

Stack Overflow用户
提问于 2018-09-11 00:25:49
回答 2查看 1.7K关注 0票数 14

我最近开始使用GitVersion对程序集进行版本化,我喜欢它!

我喜欢生成一个反映正在构建的产品版本的.msi文件。到目前为止,我在我的.wixproj文件中使用了这个:

代码语言:javascript
复制
  <!-- [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属性,如下所示:

代码语言:javascript
复制
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构建任务已经执行,之后我应该能够从名为$(GitVersion_FullSemVer)的build属性中获得完整的SemVer。

但是,我不知道如何在WiX项目中实现这一点,因为安装GitVersionTask NuGet包似乎什么都不做(在C#项目中,一切都是神奇的)。如果我能够执行GitVersion.GetVersion任务,那么我想我可以清楚地找到我想要的输出名称。

有人成功了吗?或者,有人能就如何解决这个问题提出建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-30 01:58:15

我想通了。我一开始就在正确的路线上。不需要手动执行GitVersion.GetVersion,一旦GitVersionTask NuGet包安装到WiX项目中,这将由MSBuild正确地处理。它不起作用的原因是我试图在设置GitVersion属性之前使用它们。

因此,第一件事是创建几个禁用一些不需要的GitVersion操作的属性:

代码语言:javascript
复制
  <PropertyGroup>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    <WriteVersionInfoToBuildLog>false</WriteVersionInfoToBuildLog>
    <GenerateGitVersionInformation>false</GenerateGitVersionInformation>
  </PropertyGroup>

我们不能简单地更改OutputName属性,因为它是在执行任何任务(包括GitVersion任务)之前设置的,因此如果我们尝试在其中使用GitVersion属性,它们将为空/未设置,因为GitVersion目标尚未执行。相反,我们必须在构建目标中加入一些逻辑,最明显的候选是通常在项目文件末尾找到的BeforeBuild目标:

代码语言:javascript
复制
  <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属性对其进行扩展,以创建将在构建过程的其余部分中使用的TargetNameTargetFileNameTargetPath属性。这是因为保证在生成任何输出文件之前执行BeforeBuild任务,因此在此之前将设置所有的Target*属性。

票数 5
EN

Stack Overflow用户

发布于 2018-12-28 12:44:41

,让我们看看这是否解决了您的问题

我的做法是这样的:

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

代码语言:javascript
复制
<Target Name="WriteVersionToFile" AfterTargets="GetVersion">
        <WriteLinesToFile File="$(OutputPath)version.txt" Lines="$(GitVersion_FullSemVer)" Overwrite="true" Encoding="Unicode" /> 
</Target>

然后在wix项目中用下面的示例替换BeforeBuild目标

代码语言:javascript
复制
<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文件进行版本控制。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52267096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档