我正在尝试收集名为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标志,但这不起作用。
答案 0 :(得分: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>
答案 1 :(得分: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>