Tim*_*ong 14 msbuild wix gitversion
我最近开始使用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>
Run Code Online (Sandbox Code Playgroud)
这将生成一个名为的输出文件:
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"
}
Run Code Online (Sandbox Code Playgroud)
所以我想看到的最终文件名是:
TA.DigitalDomeworks.Installer-7.1.0-Beta.3.msi
在GitVersion文档中,它说我需要确保GitVersion.GetVersion构建任务已经执行,之后我应该能够从一个名为的构建属性中获取完整的SemVer $(GitVersion_FullSemVer).
但是,我不确定如何在WiX项目中实现这一点,因为安装GitVersionTaskNuGet包似乎没有做任何事情(在C#项目中,一切都神奇地起作用).如果我能够达到可以执行GitVersion.GetVersion任务的程度,那么我认为我可以清楚地看到我想要的输出名称.
有人有这个工作吗?或者任何人都可以就如何处理此问题提供任何建议?
我想到了。我在正确的路线上开始。无需手动执行GitVersion.GetVersion,一旦将GitVersionTaskNuGet 包安装到 WiX 项目中,MSBuild 就会正确处理。它不工作的原因是因为我试图在设置之前使用 GitVersion 的属性。
因此,首先要创建几个属性来禁用一些不需要的GitVersion操作:
<PropertyGroup>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<WriteVersionInfoToBuildLog>false</WriteVersionInfoToBuildLog>
<GenerateGitVersionInformation>false</GenerateGitVersionInformation>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
我们不能简单地更改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>
Run Code Online (Sandbox Code Playgroud)
在这里,我们使用该OutputName属性作为基本名称,并使用所需的 GitVersion 属性对其进行扩充,以创建将在其余构建过程中使用的TargetName,TargetFileName和TargetPath属性。这是有效的,因为BeforeBuild任务保证在生成任何输出文件之前执行,因此所有 Target* 属性都将在此之前设置。
| 归档时间: |
|
| 查看次数: |
458 次 |
| 最近记录: |