我最近开始使用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。但是,我不确定如何在WiX项目中实现这一目标,因为安装GitVersionTask NuGet包似乎没有任何作用(在C#项目中,一切都神奇地起作用了)。如果我可以执行GitVersion.GetVersion任务,那么我想我可以清楚地获得所需的输出名称。有人有这个工作吗?或者有人可以提供有关如何解决此问题的建议吗? 最佳答案 我想到了。首先我是对的。无需手动执行GitVersion.GetVersion,一旦在WiX项目中安装了GitVersionTask NuGet软件包,MSBuild即可正确处理。它不起作用的原因是因为我试图在设置之前使用GitVersion的属性。因此,第一件事是创建几个禁用某些不必要的GitVersion操作的属性: <PropertyGroup> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> <WriteVersionInfoToBuildLog>false</WriteVersionInfoToBuildLog> <GenerateGitVersionInformation>false</GenerateGitVersionInformation> </PropertyGroup>我们不能简单地更改OutputName属性,因为该属性是在执行任何任务(包括GitVersion任务)之前设置的,因此,如果我们尝试在其中使用GitVersion属性,则它们将为空/未设置,因为目标尚未执行。相反,我们必须将一些逻辑放入构建目标中,显而易见的候选对象是通常在项目文件末尾找到的GitVersion目标: <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>在这里,我们使用BeforeBuild属性作为基本名称,并使用所需的GitVersion属性对其进行扩充,以创建将在其余构建过程中使用的OutputName,TargetName和TargetFileName属性。之所以可行,是因为确保在生成任何输出文件之前执行TargetPath任务,因此所有Target *属性都将在此之前设置。关于msbuild - 如何基于GitVersion属性命名WiX Installer项目的输出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52267096/
10-10 22:06