gpt4 book ai didi

维克斯收获 : Same Component/File ID when files are in different folders

转载 作者:行者123 更新时间:2023-12-02 05:04:00 24 4
gpt4 key购买 nike

所以我可能做得不正确,但事情是这样的:

我有一个应用程序引用了 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="&quot;$(WixTools)\heat.exe&quot; 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="&quot;$(WixTools)\heat.exe&quot; 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com