使用完整版本号重命名MSI文件

时间:2015-01-26 17:47:41

标签: wix windows-installer version

我需要让MSI输出文件名包含\ bin文件夹中输出EXE的完整版本。像MyFile_x.x.x.x.msi

这样的东西

这在.WXS文件中很有效,安装程序可以获取完整版本并在安装程序中显示它。但问题是你不能使用bind.FileVersion。在项目文件中

  <?define ProductVersion=!(bind.FileVersion.$(var.Zygo.MetroProXP.UI.TargetFileName)) ?>

推荐的解决方案是使用GetAssemblyIdentiy方法重新定义输出文件名。

   <GetAssemblyIdentity AssemblyFiles="$(OutDir)MyFile.exe">
      <Output TaskParameter="Assemblies" ItemName="ProductAssembly" />
    </GetAssemblyIdentity>
    <CreateProperty Value="$(OutputName)%(ProductAssembly.Version)">
      <Output TaskParameter="Value" PropertyName="TargetName" />
    </CreateProperty>

我的问题是返回的版本只有Major.Minor.Build,我需要完整版Major.Minor.Build.Release。这是因为GetAssemblyIdentity返回AssemblyVersion而不是AssemblyFileVersion。它确实有版本号的第4部分。有谁知道如何获得重命名MSI文件的完整版本?

2 个答案:

答案 0 :(得分:1)

我能够使用内联任务使其工作。

  <UsingTask TaskName="GetFileVersionTask"
     TaskFactory="CodeTaskFactory"
     AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
  <AssemblyPath ParameterType="System.String" Required="true" />
  <VersionNumber ParameterType="System.String" Output="true" />
</ParameterGroup>
<Task>
  <Using Namespace="System.Diagnostics" />
  <Code Type="Fragment" Language="cs">
    <![CDATA[this.VersionNumber = FileVersionInfo.GetVersionInfo(this.AssemblyPath).FileVersion;]]>
  </Code>
</Task>

然后只更改了输出目录

  <Target Name="BeforeBuild">
<GetFileVersionTask AssemblyPath="$(OutDir)MyEXEFile.exe">
  <Output TaskParameter="VersionNumber" PropertyName="VersionNumber" />
</GetFileVersionTask>
<CreateProperty Value="$(OutputName)$(VersionNumber)">
  <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>

答案 1 :(得分:0)

FWIW,我记得有些关于添加更多活页夹变量的喋喋不休。这个想法被接受,因为担心放慢WiX读取大多数人永远不会使用的东西。

MSBuild有一个名为Property Functions的概念。您可能会想出一个表达式,该表达式获取文件的版本号并将其附加到输出名称。

只是一个FYI。如果您更改了MSI文件名,请注意您将被迫进行重大升级。