我最近开始使用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"
}
所以我想要看到的最终文件名是:
TA.DigitalDomeworks.Installer-7.1.0-Beta.3.msi
在GitVersion文档中,它说我需要确保GitVersion.GetVersion
构建任务已执行,此后,我应该能够从名为$(GitVersion_FullSemVer)
的构建属性中获取完整的SemVer。 / p>
但是,我不确定在WiX项目中如何实现这一目标,因为安装GitVersionTask
NuGet包似乎没有任何作用(在C#项目中,一切都神奇地起作用了)。如果我可以执行GitVersion.GetVersion
任务,那么我想我可以清楚地得到想要的输出名称。
有人能做到这一点吗?还是有人可以提供有关如何解决此问题的建议?
答案 0 :(得分:1)
我知道了。我一开始就走对了。无需手动执行GitVersion.GetVersion
,一旦在WiX项目中安装了GitVersionTask
NuGet软件包,MSBuild即可正确处理。它不起作用的原因是因为我试图在设置之前使用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 *属性都将在此之前设置。
答案 1 :(得分:0)
让我们看看这是否可以解决您的问题
我的方法是这样的:
将以下内容添加到您的主装配项目中,而不是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之后将 GitVersion_FullSemVer 属性添加到文本文件中。然后,这些数据将在wix项目中用于对msi文件进行版本控制。