我正在尝试实现自动版本控制,以便在构建 Bootstrapper 时,MyApp 和 Bootstrapper 版本都会自动递增和同步。否则,对于每个具有匹配版本的安装尝试,您最终会在添加/删除程序中出现重复的引导条目。
当我构建引导程序时,AfterBuild 目标用于GetAssemblyIdentity
成功获取自动生成的 MyApp 版本,并且引导程序输出文件使用递增的版本号正确命名,例如MyApp.1.0.5123.1352.exe
但是,当我安装这个引导程序时,添加/删除程序中显示的版本始终是1.0.0.0
.
我尝试在 Bootstrapper Bundle Version 字段中使用绑定,但我无法让它读取 MyApp 版本。
使用!(bind.packageVersion.MyApp)
结果永远不会增加 1.0.0.0。
使用!(bind.assemblyName.MyApp)
会导致构建错误(未解决的绑定时间变量)。
使用!(bind.FileVersion.filAAF013CA9B89B07C81031AE69884BF11)
会导致构建错误(未解决的绑定时间变量)。<-- 有意义,因为 FileID 存在于Setup
项目中,这就是Bootstrapper
项目。
我该怎么做才能让我的 Bootstrapper Bundle 与它正在打包的 MyApp 具有相同的版本?
=====MyApp\AssemblyInfo.cs=====
[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("1.0.*")]
=====Setup.wixproj=====
<Target Name="BeforeBuild">
<PropertyGroup>
<LinkerBaseInputPaths>..\MyApp\bin\$(Configuration)\</LinkerBaseInputPaths>
</PropertyGroup>
<HeatDirectory OutputFile="MyApp_Files.wxs" Directory="..\MyApp\bin\$(Configuration)\" DirectoryRefId="INSTALLLOCATION" ComponentGroupName="MyApp_Project" SuppressCom="true" SuppressFragments="true" SuppressRegistry="true" SuppressRootDirectory="true" AutoGenerateGuids="false" GenerateGuidsNow="true" ToolPath="$(WixToolPath)" Condition="'%(ProjectReference.PackageThisProject)'=='True'" />
</Target>
=====Bootstrapper.wixproj=====
<Target Name="AfterBuild">
<GetAssemblyIdentity AssemblyFiles="..\MyApp\bin\$(Configuration)\MyApp.exe">
<Output TaskParameter="Assemblies" ItemName="AssemblyVersion" />
</GetAssemblyIdentity>
<Copy SourceFiles=".\bin\$(Configuration)\$(OutputName).exe" DestinationFiles=".\bin\$(Configuration)\MyApp.%(AssemblyVersion.Version).exe" />
<Delete Files=".\bin\$(Configuration)\$(OutputName).exe" />
</Target>
=====Bootstrapper\Bundle.wxs=====
<Bundle Name="$(var.ProductName) Bootstrapper v!(bind.packageVersion.MyApp)"
Version="!(bind.packageVersion.MyApp)"