Wix工具集如何复制到路径中版本为的文件夹



我正在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。应用程序项目。

相关内容

最新更新