Wix bootstrapper - 在Bundle中设置版本号

时间:2017-07-27 10:21:20

标签: wix wix3.10

我有一个使用引导程序启动我的msi文件的Wix安装程序。我已经通过在我的wix项目中将批处理文件作为post build事件调用来完成此操作。然后手动调用蜡烛和灯光,并将各种变量传递到Bundle.wxs文件中。这一切都有效,并生成调用我的msi文件的exe ..

但是,我现在想将msi BuildVersion传递到bundle文件中。在创建msi的wxs文件中,我使用的是在BeforeBuild部分中设置的BuildVersion,使用BuildVersion =%(AssemblyVersion.Version)。

无论我尝试什么,我都无法访问此变量,以便将其传递给我的build_bootstrapper.bat文件。然而,我可以传递硬编码的值。我正在设置我自己的AssemblyVersionNumber环境变量,如下面的AfterBuild部分所示:

<AssemblyVersionNumber Condition="'$(AssemblyVersionNumber)' == ''">$(BuildVersion)</AssemblyVersionNumber>

但是当它到达我的脚本文件时它是空的(即使它是硬编码的,也是填充的)。我已经尝试了一切。

有没有人知道如何获得%(AssemblyVersion.Version);从post build步骤到我的命令文件?

提前致谢

   <Target Name="BeforeBuild">
    <GetAssemblyIdentity AssemblyFiles="..\..\App\AppThing\bin\Release\AppThing.exe">
      <Output TaskParameter="Assemblies" ItemName="AssemblyVersion" />
    </GetAssemblyIdentity>
    <PropertyGroup>
      <DefineConstants>BuildVersion=%(AssemblyVersion.Version);</DefineConstants>
    </PropertyGroup>
  </Target>
  <Target Name="AfterBuild">
    <PropertyGroup>
      <DefineConstants>BuildVersion=%(AssemblyVersion.Version);</DefineConstants>
      <AssemblyVersionNumber Condition="'$(AssemblyVersionNumber)' == ''">$(BuildVersion)</AssemblyVersionNumber>
    </PropertyGroup>
  </Target>
  <PropertyGroup>
    <PreBuildEvent>$(ProjectDir)scripts\copy_services.bat $(SolutionDir) $(ProjectDir)</PreBuildEvent>
  </PropertyGroup>
  <Target Name="AfterClean">
    <Message Text="Cleaning wix files, TargetDir is: $(TargetDir)" Importance="High" ContinueOnError="true" />
    <CreateItem Include="$(TargetDir)\**\*.*">
      <Output TaskParameter="Include" ItemName="BinFilesDir" />
    </CreateItem>
    <Delete Files="@(BinFilesDir)" />
  </Target>      
  <PropertyGroup>
    <PostBuildEvent>$(ProjectDir)scripts\build_bootstrapper.bat $(ProjectDir) $(ConfigurationName) $(AssemblyVersionNumber)</PostBuildEvent>
  </PropertyGroup>

1 个答案:

答案 0 :(得分:1)

$(BuildVersion)未设置为任何内容。

您将定义常量设置为“BuildVersion =%(AssemblyVersion.Version)”但从未实际定义名为“BuildVersion”的MSBuild属性,因此$(BuildVersion)的值为“”。

使用%(AssemblyVersion.Version)。

<AssemblyVersionNumber Condition="'$(AssemblyVersionNumber)' == ''">%(AssemblyVersion.Version)</AssemblyVersionNumber>