我正在VS2019中使用Wix工具集v3.11为我们的应用程序创建一个设置。为了便于维护,我需要将安装程序文件复制到路径中包含版本的文件夹中。
基本上,我想使用一个构建后事件,将文件复制到$(BootstrapPackageVersion)$(Configuration)
目录,但我找不到这样的变量。
我试图用.wixproj文件中的以下代码从.exe包中提取版本(因为它的版本是从MSI包中获得的,而MSI包本身就是从原始应用程序中获得的(:
</PropertyGroup>
<Target Name="AfterBuild">
<GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
<Output TaskParameter="Assemblies" ItemName="AssemblyVersions" />
</GetAssemblyIdentity>
<CreateProperty Value="$(TargetDir)/%(AssemblyVersions.Version)/">
<Output TaskParameter="Value" PropertyName="CustomTargetName" />
</CreateProperty>
<Copy SourceFiles="$(TargetDir)/*" DestinationFolder="$(CustomTargetName)"/>
</Target>
但由于以下错误而失败:
无法获取"的程序集名称;[路径]\Setup.exe";。无法加载文件或程序集"Setup.exe"或其依赖项之一。该模块应包含程序集清单。
我看到有一个属性$(WixBundleVersion)
,但它似乎不可用于生成事件。
基本上,我想要实现的是一件相当简单的事情:从引导程序项目中获取输出,并将所有内容复制到另一个包含包版本的路径中。有可能吗?
我在wix项目中这样做的方法是将setup.exe输出到它的默认文件夹中,然后运行AfterBuild
并将其复制到最终工件目录
在wixproj:
<Target>
...
<GetAssemblyIdentity AssemblyFiles="..MyApp.Appbin$(Configuration)net5.0FrameworkDepwin-$(Platform)PublishMyApp.App.dll">
<Output TaskParameter="Assemblies" ItemName="AssemblyVersion" />
</GetAssemblyIdentity>
<PropertyGroup>
<DefineConstants>BuildVersion=%(AssemblyVersion.Version)</DefineConstants>
</PropertyGroup>
...
</Target>
<Target Name="AfterBuild">
<Copy SourceFiles=".bin$(Configuration)en-us$(OutputName).msi" DestinationFiles=".bin$(Configuration)$(OutputName)_%(AssemblyVersion.Version).msi" />
</Target>
这会分配BuildVersion
,然后可以在wxs文件中使用和AssemblyVersion
,您可以在带有%(AssemblyVersion.Version)
的wixproj中使用
AfterBuild
部分正在将msi复制到MyApp_1.2.3.msi
在我的wxs文件中,我可以使用:
<Product Id="*" Name="My App" Language="1033"
Version="$(var.BuildVersion)>
这是使用上面的构建版本,所以我只是版本控制MyApp。应用程序项目。