Wix引导程序-设置捆绑包中的版本号

Wix引导程序-设置捆绑包中的版本号,wix,wix3.10,Wix,Wix3.10,我有一个Wix安装程序,它使用引导程序来启动我的msi文件。我通过在wix项目中调用批处理文件作为构建后事件来实现这一点。然后手动调用candle和light,并将各种变量传递到Bundle.wxs文件中。这一切都可以工作并生成调用我的msi文件的exe 但是,我现在想将msi BuildVersion传递到bundle文件中。在创建msi的wxs文件中,我使用在BeforeBuild部分中设置的BuildVersion,使用BuildVersion=%(AssemblyVersion.Vers

我有一个Wix安装程序,它使用引导程序来启动我的msi文件。我通过在wix项目中调用批处理文件作为构建后事件来实现这一点。然后手动调用candle和light,并将各种变量传递到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);从生成后步骤到我的命令文件

提前谢谢

   <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>

BuildVersion=%(AssemblyVersion.Version);
BuildVersion=%(AssemblyVersion.Version);
$(构建版本)
$(ProjectDir)scripts\copy_services.bat$(SolutionDir)$(ProjectDir)
$(ProjectDir)scripts\build_bootstrapper.bat$(ProjectDir)$(ConfigurationName)$(AssemblyVersionNumber)
$(BuildVersion)未设置为任何值

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

使用%(AssemblyVersion.Version)

%(AssemblyVersion.Version)

您好,非常感谢您的回复。恐怕我已经试过了。使用%(AssemblyVersion.Version)似乎是个问题。下面的两行结果为:1:空字符串%(AssemblyVersion.Version)2:项目目录$(ProjectDir)我可以访问和存储一些变量,但不能访问和存储程序集版本号!有什么想法吗?感谢您可以尝试在beforebuild目标的propertygroup中执行
%(AssemblyVersion.Version)
,然后在AssemblyVersionNumber的定义中再次使用
$(BuildNumber)
。可能是另一个目标内的GetAssemblyIdentity目标的输出项的作用域仅为该目标。更好的是,只需将
%(AssemblyVersion.Version)
移动到BeforeBuild目标的PropertyGroupHi中。我也试过了,不过还是非常感谢你。实际上,我刚刚恢复调用一个简单的C#应用程序来检索给定exe的程序集版本号。然后,我从我的批处理文件中调用它,生成后步骤调用它。然后我可以使用它来传递到wix包,一切都很好。不过,我之前一直试图避免这种情况。谢谢你的回复。我会投赞成票,但不能真正接受,因为它可能误导别人,我希望你同意。
<AssemblyVersionNumber Condition="'$(AssemblyVersionNumber)' == ''">%(AssemblyVersion.Version)</AssemblyVersionNumber>