WiX预处理器<! - ?define? - >在C Sharp中以编程方式创建

时间:2010-07-06 08:52:26

标签: c# wix

我有一个自动和编程更新的WiX文件。这个文件需要添加一个define标签,但我找不到用C#做这个的方法。每次我尝试添加一个元素时,它都表示它不包含在根元素中(这是真的,因为“define”是一个预处理器命令,并且不包含在根元素中)。为了编辑XML标签(也是预处理器),还有内置的功能。有谁知道是否还有内置的功能定义?谢谢你的帮助!

3 个答案:

答案 0 :(得分:2)

如果您使用的是XmlWriter,请使用WriteProcessingInstruction编写处理指令。如果您使用的是XSLT,请使用xsl:processing-instruction。如果您使用不同的C#机制来创建XML,请告诉我们 - 大多数机制都有创建处理指令的工具。

答案 1 :(得分:1)

这是我用于同一任务的函数

static void WritePreProcessor(Parameters p)
{
    XmlDocument doc = new XmlDocument();
    doc.Load(p.InputXml);
    XmlProcessingInstruction pi = doc.CreateProcessingInstruction(p.Name, p.Value);
    XmlNode root = doc.DocumentElement;
    doc.InsertBefore(pi, root);
    doc.Save(p.OutputXml);
}

p.Name =“define”,p.Value =“SourceDir = .... \ build”,结果如下

<?xml version="1.0" encoding="utf-8"?>
<?define SourceDir=..\..\build?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Fragment>
  ...
  </Fragment>
</Wix>

答案 2 :(得分:0)

我认为你必须在“文本”模式下编辑文件,而不是在XML模式下编辑文件。 一种可能的解决方案是在XML模式下在文件中插入特殊标记,例如

<a_very_special_marker/>

然后在文件的文本上替换这些标记。