当我构建安装程序项目(如ClickOnce发布按钮)时,是否可以在WIX配置文件中基于项目Assembly version
或<?define ProductVersion="1.0.0.0" ?>
版本生成新文件夹。
我想要这样的东西:
MyProjectPublishes/
----MyProject1.0.0.0/
MyProjectSetup.msi
----MyProject2.0.0.0/
MyProjectSetup.msi
----MyProject3.0.0.0/
MyProjectSetup.msi
答案 0 :(得分:1)
是的,但请记住,您的MSI不应该是主要升级,否则它们将删除以前的版本(除非您想要的是这样;大概您需要并排文件夹,以便它们可以同时安装)。 / p>
首先,要了解您不应该对组件GUID进行硬编码。虽然支持将相同的组件GUID转到不同的文件夹,但它会产生许多问题,最好避免更新和卸载。维护也很痛苦,所以只需对组件使用自动GUID。
像这样创建目录创作(假设你传入一个ProductVersion变量):
<?define ProductName="MyProduct"?>
<?ifndef ProductVersion?>
<?define ProductVersion=1.0.0?>
<?endif?>
<Product Name="$(var.ProductName)" Version="$(var.ProductVersion)" ...>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="Program Files">
<Directory Id="INSTALLDIR" Name="$(var.ProductName)">
<Directory Id="VersionDir" Name="$(var.ProductVersion)"/>
</Directory>
</Directory>
</Directory>
</Product>
这只是目录表的示例代码段。我将INSTALLDIR定义为根产品路径,以便您控制进入每个版本目录的所有版本,以便用户不会意外地使用不同的组件GUID来压缩以前的版本(同一位置的不同组件GUID导致在卸载时删除文件)因为它们没有被重新计算。)
要安装,您可以执行以下操作:
<Component Directory="VersionDir">
<File Source="foo.dll"/>
</Component>
请注意,我没有指定GUID,也没有指定任何其他ID。它们将被生成,并且GUID将是稳定的(意思是,使用相同的版本,所有后续的重建将具有相同的GUID,直到您更改版本 - 这正是它应该如何工作)。
要查看正在使用的示例(以及如何从引用的C#项目中的文件中获取版本),请参阅https://github.com/heaths/psmsi/tree/develop/src/Setup。