我根据目录(用于 Web 应用程序)自动为安装程序生成 WiX 文件,其中包含对以下 3 个 .Net 程序集的引用:
- 迁移器.dll
- 迁移器.Framework.dll
- 迁移器.Providers.dll
这是生成 WiX 片段:
<Fragment>
<DirectoryRef Id="bin">
<Component Id="bin.Migrator.dll" Guid="*">
<File Id="bin.Migrator.dll" Name="Migrator.dll" KeyPath="yes" Source="..\WebApplication\bin\Migrator.dll" />
</Component>
</DirectoryRef>
</Fragment>
<Fragment>
<DirectoryRef Id="bin">
<Component Id="bin.Migrator.Framework.dll" Guid="*">
<File Id="bin.Migrator.Framework.dll" Name="Migrator.Framework.dll" KeyPath="yes" Source="..\WebApplication\bin\Migrator.Framework.dll" />
</Component>
</DirectoryRef>
</Fragment>
<Fragment>
<DirectoryRef Id="bin">
<Component Id="bin.Migrator.Providers.dll" Guid="*">
<File Id="bin.Migrator.Providers.dll" Name="Migrator.Providers.dll" KeyPath="yes" Source="..\WebApplication\bin\Migrator.Providers.dll" />
</Component>
</DirectoryRef>
</Fragment>
我们已经使用相同的基本安装程序结构一年左右了,但最近我们将 Migrator.Net 库更新为新的内部版本,版本号和程序集标题/描述属性从(从 Orca 转储出来)发生了变化
- bin.Migrator.dll bin.Migrator.dll Migrator.dll 16384 3.0.1317.0 0 512 78
- bin.Migrator.Framework.dll bin.Migrator.Framework.dll pi0mozkr.dll|Migrator.Framework.dll 20992 3.0.1317.0 0 512 79
- bin.Migrator.Providers.dll bin.Migrator.Providers.dll jq05waoy.dll|Migrator.Providers.dll 73216 3.0.1317.0 0 512 82
升级库后:
- bin.Migrator.dll bin.Migrator.dll Migrator.dll 16384 3.2.0.1 0 512 55
- bin.Migrator.Framework.dll bin.Migrator.Framework.dll pi0mozkr.dll|Migrator.Framework.dll 28160 3.2.0.1 0 512 56
- bin.Migrator.Providers.dll bin.Migrator.Providers.dll jq05waoy.dll|Migrator.Providers.dll 79872 3.2.0.1 0 512 57
虽然次要版本更高,但修订版现在是 1 而不是 1317。
从那时起我们发现升级到新版本会导致这3个文件没有被复制(因此升级过程会删除旧文件,但不会安装新文件)。
这是否与程序集的版本号更改有关,如果是,是否有任何方法可以覆盖此行为(我们只想删除所有内容,然后复制所有内容,无论版本如何)。
有趣的是,如果您安装,然后重新运行安装程序并进行“修复”,它确实会复制新文件 - 我认为这是因为修复文件时不再存在,因此文件版本检查逻辑不适用?
任何有关其工作原理以及如何避免我们遇到的升级问题的提示将不胜感激。
As 链接的问题建议您可以尝试重新安排删除现有产品以便在安装任何新文件之前删除旧产品,如下所示:
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallValidate" />
<!-- other actions -->
</InstallExecuteSequence>
另一种选择是修改REINSTALLMODE属性,并替换e
模式与a
,这意味着它的价值将是amus
。这样所有的文件都会被重新安装,操作时间会更长,但更可靠。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)