2

我正在尝试获取一个名为 Release 的目录,但是在我的安装程序中,我希望将文件安装到“bin”中。

这是我在 Visual Studio 2012 中添加到我的 wix3.7 中的预建事件命令行

"%WIX%\bin\heat.exe" dir "$(SolutionDir)\Export\Release" -dr INSTALLFOLDER -cg ExportComponentGroup -var var.sourcePath -ag -sreg -suid -out "$(SolutionDir)\SetupProject\ProjExportDir.wxs"

我怎样才能改变这个输出:

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
        <DirectoryRef Id="INSTALLFOLDER">
            <Directory Id="dir813D1F0C17C6517DA1B9A933450C5B91" Name="Release" />
        </DirectoryRef>
    </Fragment>
    <Fragment>
        <ComponentGroup Id="ExportComponentGroup">
            <Component Id="cmp6711F65C37F4310E92A3213080231DA6" Directory="dir813D1F0C17C6517DA1B9A933450C5B91" Guid="*">
                <File Id="filABBC16CBAD4348690B2250C408181254" KeyPath="yes" Source="$(var.sourcePath)\3AWrapper.dll" />
            </Component>

进入这个:

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
        <DirectoryRef Id="INSTALLFOLDER">
            <Directory Id="bin" Name="bin" />
        </DirectoryRef>
    </Fragment>
    <Fragment>
        <ComponentGroup Id="ExportComponentGroup">
            <Component Id="cmp6711F65C37F4310E92A3213080231DA6" Directory="bin" Guid="*">
                <File Id="filABBC16CBAD4348690B2250C408181254" KeyPath="yes" Source="$(var.sourcePath)\3AWrapper.dll" />
            </Component>

我曾尝试使用 -directoryid 标志,但这不起作用。

4

2 回答 2

3

有几种方法可以做到这一点。

1) XSL 转换Heat 将在编写输出文件之前为您运行转换。您只需提供 .xsl 文件。这是您需要更改的任何有关热量输出的通用方法。如果另一种方法有效,我会这样做。

2) -srd 开关在另一个 wxs 文件中手动编写 bin 目录并获取热量以将其作为收获项目的父级引用,而不为根文件夹 Release 生成另一个目录。 heat dir "$(SolutionDir)\Export\Release" -dr bin -srd ...

Product.wxs 中的示例:

<!-- Under Wix/Product -->
<Fragment>
  <Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="ProgramFilesFolder">
      <Directory Id="INSTALLFOLDER" Name="SetupProject1">
        <Directory Id="bin" Name="bin" />
      </Directory>
    </Directory>
  </Directory>
</Fragment>
于 2013-05-26T14:02:14.943 回答
2

如果您想使用 XSL 转换,那么您可以使用以下内容:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:wix="http://schemas.microsoft.com/wix/2006/wi">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>  

 <xsl:template match="wix:Directory[@Name='Release']/@Id">
  <xsl:attribute name="Id">BIN</xsl:attribute>
 </xsl:template>

</xsl:stylesheet>
于 2013-05-28T10:36:39.510 回答