如何在 WiX 工具集中设置自动收获文件的 CompanionFile 属性?

问题描述 投票:0回答:1

我正在开发一个项目,需要在 MSI 安装程序中处理 System.IO.Compression.Native.dll 的版本降级。这个问题在 GitHub 上进行了讨论,建议使用 WiX 的 CompanionFile 功能来解决版本冲突。

GitHub问题供参考:

.NET 7 中 System.IO.Compression.Native.dll 的版本降级导致 Microsoft 安装程序损坏 #82518

重现步骤:

  1. 创建新的 .NET 6 应用程序。
  2. 将应用程序发布为独立应用程序。
  3. 使用 WiX 工具集将应用程序捆绑为 MSI 文件。
  4. 对于 .NET 7 重复步骤 1-3。
  5. 将 MSI 从 .NET 6 升级到 .NET 7,导致 System.IO.Compression.Native.dll 缺失的问题。

解决方法:

建议的解决方法是使用 WiX 的 CompanionFile 功能。具体来说,将 System.IO. Compression.dll 配置为 System.IO. Compression.Native.dll 的伴侣。

问题:

我知道我需要设置 CompanionFile 属性,但我正在使用 WiX 的收集功能,它会自动生成组件和文件 XML 元素。因此,我无法直接编辑这些元素来添加 CompanionFile 属性。

问题:

  1. 如何为 .wixproj 文件中自动获取的文件配置 CompanionFile 属性?
  2. 有没有办法修改或扩展收获的输出以包含必要的 CompanionFile 属性?

参考资料:

任何有关如何处理这种情况的帮助或指导将不胜感激!

根据讨论,我知道如果我可以直接编辑 XML,配置应该如下所示:

<Component Id="Comp_Compression" Guid="*">
  <File Id="System_IO_Compression_dll" Source="@(Path to System.IO.Compression.dll)" KeyPath="yes" />
  <File Id="System_IO_Compression_Native_dll" Source="@(Path to System.IO.Compression.Native.dll)" CompanionFile="System_IO_Compression_dll" />
</Component>

但是,我需要在使用收获功能时实现此配置。

wix .net-6.0 system.io.compression
1个回答
0
投票

我遇到了同样的问题,这是解决方案:

  1. 按照您的描述使用压缩文件

  2. 为了收获,使用 xslt 转换文件(如果您使用 heat.exe,则将 -t 参数与 file.xslt 一起使用,或者在 WIX4 中,您可以在项目文件中定义它)

  3. 在转换文件中写入如下内容:

    这包括一切... xsl:复制

    除了...

© www.soinside.com 2019 - 2024. All rights reserved.