- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我可能做得不正确,但事情是这样的:
我有一个应用程序引用了 4 个 SQL Server 程序集
应用程序必须支持 SQL 2008 和 2010。
我让它工作的唯一方法是让我的应用程序引用我的 SQL 程序集的“通用”路径。然后在我的 MSBuild 项目中,我将 2008 程序集复制到“generic”文件夹并编译我的应用程序。 2012 年我再次这样做。
我有一个类似 Tools\Release\V2008 和 Tools\Release\V2010 的文件夹。这些文件夹包含所有 EXE 和所需的 DLL(包括 4 个 sql 服务器)。我对这些文件夹运行 HEAT。
但是,当我对每个文件夹运行 heat 时,每个文件夹都有相同的目录 ID 但不同的组件,我得到 2 个 wxs 文件,每个文件都有相同的文件(预期),但每个组件和文件 id 在这两个文件中都是相同的wxs 文件。
示例:
MSBuild Command:
<Exec Command=""$(WixTools)\heat.exe" dir $(DeploymentRoot)\Tools\V2008 -dr TOOLS -cg Tools2008Component -var var.Tools2008Path -gg -scom -sreg -sfrag -srd -o $(heatOutputPath)\cmp2008ToolsFrag.wxs"/>
WXS File
<DirectoryRef Id="TOOLS">
<Component Id="cmp04831EC1F8BB21C028A7FC875720302F" Guid="*">
<File Id="fil09727A8BFD32FDCE7C743D6DD2008E7C" KeyPath="yes" Source="$(var.Tools2008Path)\AL3Util.exe" />
</Component>
MSBuild Command:
<Exec Command=""$(WixTools)\heat.exe" dir $(DeploymentRoot)\Tools\V2012 -dr TOOLS -cg Tools2012Component -var var.Tools2012Path -gg -scom -sreg -sfrag -srd -o $(heatOutputPath)\cmp2012ToolsFrag.wxs"/>
WXS file
<DirectoryRef Id="TOOLS">
<Component Id="cmp04831EC1F8BB21C028A7FC875720302F" Guid="*">
<File Id="fil09727A8BFD32FDCE7C743D6DD2008E7C" KeyPath="yes" Source="$(var.Tools2012Path)\AL3Util.exe" />
</Component>
如何让每个 WXS 文件具有唯一的组件和文件 ID?或者 - 我怎样才能做得更好:)
谢谢!
最佳答案
ID 将相同,因为您使用的是 -srd
,禁止根目录。在这种情况下,用于生成ID的路径将只是文件名,为同名文件生成相同的ID。
您有两种选择:
1) 在执行 heat 时使用转换,以使用 -t
获取文件。
2) 收获后使用 XslTransform 任务 (.NET 4) 将 ID 重命名为 File_2012_AL3Util 和 File_2008_AL3Util 等名称。
您可以将此 XSL 应用于您的文件。在下面的示例中,如果该元素与文件名“MyFile”和目录 ID 匹配“MyID”,则该元素将被删除。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wi="http://schemas.microsoft.com/wix/2006/wi">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<!-- Matches both directory name and file name. -->
<!-- Matches any Component that has its @Directory with same @Id as Directory 'MyID'. -->
<!-- Function ends-with does not work with heat. -->
<xsl:template match="//wi:Component[@Directory=//wi:Directory[@Name='MyID']/@Id and substring(wi:File/@Source, string-length(wi:File/@Source) - string-length('MyFile') + 1) = 'MyFile']" />
</xsl:stylesheet>
关于维克斯收获 : Same Component/File ID when files are in different folders,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25813880/
我有一个自定义操作 CHECKBOXCOPYPROP=1 我的自定义操作会备份和解析数据库。取消安装时我需要回滚(删除数据库)。我做了: CHECKBOXCOPYP
在 WIX 中,我希望可以正常安装和卸载某个功能,但在修复过程中不要触及该功能。 我找不到允许我这样做的条件。 我的尝试失败了:该功能在修复时重新安装(我不需要)或未卸载。 这是我上次尝试的示例:
我在那里写了两个文件 Product.wxc 和自定义操作 CheckBoxProp=1 在另一个文件 MyCheckBoxDlg.wxc 中,我在那
基本上我需要改变这种行为: Installing a product with the same version and upgrade code (but different product cod
我为一个内部项目开发了一个 Wix 安装程序,但完全是偶然的,我发现我无法在我的开发机器上卸载安装程序,因为我收到以下错误消息: The feature you are trying to use i
我已经对我的安装程序脚本进行了重大升级,需要将附加组件之一插入到 GAC 中。我正在使用以下代码序列 安装而不是升级早期版本是成功的,但是,如果我升级,我会在详细日志中看到以下条目 取消注册
我使用 WIX 工具集生成 MSI 文件,然后将它们放在一个包中。然后,我签名 (wix manual)包中的引擎和包本身: insignia -ib bundle.exe -o engine.exe
我想为我的应用程序创建一个安装程序 (msi)。我想添加一个包含大量文件的文件夹。所以我使用 heat 为文件夹创建 wxs 文件。创建的 wxs 文件如下所示:
我正在使用 WiX MSMQ 扩展通过以下代码创建队列: Privileged 但是,当我执行 candle.exe -ext WixMsmqExtension Blah.
我是一名优秀的程序员,十分优秀!