如何使用WiX预处理器杂注



我目前正在测试WiX项目,看看我能用它做些什么。

最近,我偶然发现这样一个事实:我可以在编译时重写预处理器扩展中的ProcessPragma方法来编写WiX源代码。有一个预处理器函数可以返回一个xml字符串,而编译器不会抓狂,这听起来很不错。所以我研究了一下,但这个wix用户线程中的响应非常简短,没有太多解释。除此之外,谷歌没有返回任何有趣的东西。因此,我深入研究了WiX的源代码以了解更多信息。

该方法的xml文档如下:

/// <summary>
/// Processes a pragma defined in the extension.
/// </summary>
/// <param name="sourceLineNumbers">The location of this pragma's PI.</param>
/// <param name="prefix">The prefix of the pragma to be processed by the extension.</param>
/// <param name="pragma">The name of the pragma.</param>
/// <param name="args">The pragma's arguments.</param>
/// <param name="writer">The xml writer.</param>
/// <returns>false if the pragma is not defined.</returns>
/// <comments>Don't return false for any condition except for unrecognized pragmas. 
    Throw errors that are fatal to the compile. use core.OnMessage for warnings and messages.</comments>

因此,作为测试,我让XmlWriter生成一个伪属性,然后返回true。

现在,在我的WiX项目中实际调用它。在Preprocessor.cs中,我发现了以下内容:

switch (reader.NodeType)
{
    case XmlNodeType.ProcessingInstruction:
        switch (reader.LocalName)
        {
            // other cases such as define, include, foreach, 
            // and other preprocessor directives                
            case "pragma":
                this.PreprocessPragma(reader.Value, writer);
                break;
        }
        break;

这暗示了使用杂注的语法是:<?pragma prefix.name?>

但这给了我以下警告:The pragma 'prefix.name' is unknown. Please ensure you have referenced the extension that defines this pragma.

我有一种感觉,我走在了正确的轨道上,因为这给了我一个与实用主义有关的警告,但老实说,我不知道我在这里做什么。这似乎是一个未知的领域。

有人知道我做错了什么,或者给我指明了正确的方向吗?

更新

我的项目似乎是个问题。我在另一个项目中使用了我的扩展,它就像一个魅力。

对于将来读到这篇文章的人来说,语法是<?pragma prefix.name args?>,其中的参数只是一个字符串。顺便说一句,您不会在override方法中关闭XmlWriter

首先,确保将-ext pathtoYourPragmaExtensionAssembly.dll传递给candle.exe。Candle将加载您的扩展,查找指向从WixExtension继承的类的AssemblyDefaultWixExtension属性,然后如果您重写PreprocessorExtension属性,则请求您的PreprocessorExtension类。

这是一个可以在WiX工具集的未来版本(如v4.0(中简化的小布线。但是WiXv3.x工具集中有一个示例:srcextPreProcExampleExtensionwixext应该说明了这一点。

相关内容

  • 没有找到相关文章

最新更新