代码之家  ›  专栏  ›  技术社区  ›  Christopher B. Adkins

WiX预处理器<?define?>用C语言编程创建

  •  0
  • Christopher B. Adkins  · 技术社区  · 16 年前

    我有一个WiX文件,它可以通过编程自动更新。该文件需要添加define标记,但我找不到使用C#执行此操作的方法。每次我尝试添加一个元素时,它都会说它不包含在根元素中(这是正确的,因为“define”是一个预处理器命令,不包含在根元素中)。为了编辑XML标记(也就是预处理器),有内置的功能。有人知道define是否也有内置的功能吗?谢谢你的帮助!

    3 回复  |  直到 16 年前
        1
  •  2
  •   Pete Kirkham    16 年前

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

        2
  •  1
  •   mcdon    14 年前

    这里有一个函数,我正在使用相同的任务

    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>
    
        3
  •  0
  •   slurdge    16 年前

    我认为您必须在“文本”模式下编辑文件,而不是在XML模式下。

    <a_very_special_marker/>