1

私は現在、WiXのテストプロジェクトに取り組んでおり、それを使って何ができるかを確認しています。

ProcessPragma最近、プリプロセッサ拡張機能のメソッドをオーバーライドして、コンパイル時にWiXソースコードを記述できるという事実に遭遇しました。コンパイラが凶暴になることなくxml文字列を返すプリプロセッサ関数があると、すっきりします。それで私はそれを調べました、しかしこのwix-usersスレッドの応答は非常に簡潔で、多くを説明していません。Googleはそれ以上の興味深いものを返しません。そこで、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?>引数が単なる文字列であるところです。XmlWriterまた、補足として、オーバーライドメソッドでを閉じないでください。

4

1 に答える 1

0

-ext path\to\YourPragmaExtensionAssembly.dllまず、 toを渡していることを確認してくださいcandle.exe。Candle は拡張機能をロードAssemblyDefaultWixExtensionし、WixExtension から継承するクラスを指す属性を探し、プロパティPreprocessorExtensionをオーバーライドする場合はクラスを尋ねPreprocessorExtensionます。

これは、WiX ツールセットの将来のバージョン (v4.0 など) で簡素化される可能性のある、ちょっとした配線です。しかし、次の場所にある WiX v3.x ツールセットに例がありsrc\ext\PreProcExampleExtension\wixextます。

于 2013-02-27T14:55:03.333 に答える