Sdílet prostřednictvím


Názorný postup: Připojení hostitelského procesoru generované směrnice

Můžete napsat vlastní hostitele, který zpracovává text šablony.Základní vlastní hostitele je znázorněn v Názorný postup: Vytváření vlastní Text šablony hostitele.Nelze rozšířit tento hostitel přidat funkce, jako například generování více výstupních souborů.

V tomto návodu rozbalte své vlastní hostitele tak, aby text šablony, které směrnice procesorů volání podporuje.Při definování domény specifické pro jazyk, vygeneruje směrnice procesoru pro model domény.Procesor směrnice usnadňuje uživatelům psát šablony, které přístup k modelu, snižuje potřebu zapisovat sestavení a importovat směrnic v šablonách.

Poznámka k upozorněníUpozornění

Tento návod je založena na Názorný postup: Vytváření vlastní Text šablony hostitele.První provedení tohoto postupu.

Tento postup zahrnuje následující úkoly:

  • Pomocí Jazykové nástroje specifické pro doménu ke generování směrnice procesoru, který je založen na modelu domény.

  • Připojování vlastní text šablony hostitele generované směrnice procesoru.

  • Testování vlastní hostitele s generované směrnice procesoru.

Požadavky

Chcete-li definovat DSL, je třeba nainstalovat následující součásti:

Visual Studio

https://go.microsoft.com/fwlink/?LinkId=185579

Visual Studio SDK

https://go.microsoft.com/fwlink/?LinkId=185580

Visual Studio vizualizaci a modelování SDK

https://go.microsoft.com/fwlink/?LinkID=186128

Kromě toho musí mít transformace vlastní text šablony vytvořené v Názorný postup: Vytváření vlastní Text šablony hostitele.

Pomocí nástroje domény specifické pro jazyk generovat směrnice procesoru

V tomto návodu pomocí Průvodce domény specifické pro jazyk Návrhář vytvoření domény specifické pro jazyk pro řešení DSLMinimalTest.

Generovat směrnice procesoru, který je založen na modelu domény pomocí nástroje domény specifické pro jazyk

  1. Vytvořte řešení domény specifické pro jazyk, který má následující vlastnosti:

    • Název: DSLMinimalTest

    • Šablona řešení: minimální jazyk

    • Přípony souboru: min

    • Název společnosti: Fabrikam

    Další informace o vytváření řešení domény specifické pro jazyk, viz Jak: vytvoření řešení domény specifické pro jazyk.

  2. V nabídce Sestavení klikněte na příkaz Sestavit řešení.

    Důležitá poznámkaDůležité

    Tento krok vygeneruje směrnice procesoru a přidá klíč pro něj v registru.

  3. V nabídce Ladit klikněte na příkaz Spustit ladění.

    Druhý výskyt Visual Studio otevře.

  4. V experimentální sestavení v Aplikaci Solution Explorer, poklepejte na soubor sample.min.

    Soubor se otevře v návrháři.Všimněte si, že model má dva prvky, ExampleElement1 a ExampleElement2 a spojení mezi nimi.

  5. Zavřete druhou instanci Visual Studio. 

  6. Roztok uložte a zavřete Návrhář domény specifické pro jazyk.

Připojení hostitele vlastní Text šablony do směrnice procesoru

Po vytvoření směrnice procesoru připojit směrnice procesoru a hostitele vlastní text šablony vytvořené v Názorný postup: Vytváření vlastní Text šablony hostitele.

Vlastní text šablony hostitele generované směrnice procesoru

  1. Otevřete CustomHost roztoku.

  2. V nabídce Projekt klepněte na příkaz Přidat odkaz.

    Přidat odkaz na otevře se dialogové okno s .NET kartu zobrazení.

  3. Přidejte následující odkazy:

    • Microsoft.VisualStudio.Modeling.SDK.11.0

    • Microsoft.VisualStudio.Modeling.SDK.Diagrams.11.0

    • Microsoft.VisualStudio.TextTemplating.11.0

    • Microsoft.VisualStudio.TextTemplating.Interfaces.11.0

    • Microsoft.VisualStudio.TextTemplating.Modeling.11.0

    • Microsoft.VisualStudio.TextTemplating.VSHost.11.0

  4. V horní části Program.cs nebo Module1.vb přidejte následující řádek kódu:

    using Microsoft.Win32;
    
    Imports Microsoft.Win32
    
  5. Vyhledejte kód pro vlastnost StandardAssemblyReferencesa nahraďte následující kód:

    [!POZNÁMKA]

    V tomto kroku můžete přidat odkazy na sestavení, které jsou vyžadované generované směrnice procesor podporující vaše hostitele.

    //the host can provide standard assembly references
    //the engine will use these references when compiling and
    //executing the generated transformation class
    //--------------------------------------------------------------
    public IList<string> StandardAssemblyReferences
    {
        get
        {
            return new string[]
            {
                //if this host searches standard paths and the GAC
                //we can specify the assembly name like this:
                //"System"
                //since this host only resolves assemblies from the 
                //fully qualified path and name of the assembly
                //this is a quick way to get the code to give us the
                //fully qualified path and name of the System assembly
                //---------------------------------------------------------
                typeof(System.Uri).Assembly.Location,
                            typeof(System.Uri).Assembly.Location,
                typeof(Microsoft.VisualStudio.Modeling.ModelElement).Assembly.Location,
                typeof(Microsoft.VisualStudio.Modeling.Diagrams.BinaryLinkShape).Assembly.Location,
                typeof(Microsoft.VisualStudio.TextTemplating.VSHost.ITextTemplating).Assembly.Location,
                typeof(Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation).Assembly.Location
    
            };
        }
    }
    
  6. Vyhledejte kód funkce ResolveDirectiveProcessora nahraďte následující kód:

    Důležitá poznámkaDůležité

    Tento kód obsahuje pevně odkazy název generovaný směrnice procesoru, ke kterému se chcete připojit.Nelze snadno provedete to obecnější, v případě vyhledá všechny procesory směrnice uvedené v registru a pokusí se najít.V takovém případě by hostitel pracovat všechny generované směrnice procesoru.

    //the engine calls this method based on the directives the user has 
            //specified it in the text template
            //this method can be called 0, 1, or more times
            //---------------------------------------------------------------------
            public Type ResolveDirectiveProcessor(string processorName)
            {
                //check the processor name, and if it is the name of the processor the 
                //host wants to support, return the type of the processor
                //---------------------------------------------------------------------
                if (string.Compare(processorName, "DSLMinimalTestDirectiveProcessor", StringComparison.InvariantCultureIgnoreCase) == 0)
                {
                    try
                    {
                        string keyName = @"Software\Microsoft\VisualStudio\10.0Exp_Config\TextTemplating\DirectiveProcessors\DSLMinimalTestDirectiveProcessor";
                        using (RegistryKey specificKey = Registry.CurrentUser.OpenSubKey(keyName))
                        {
                            if (specificKey != null)
                            {
                                List<string> names = new List<String>(specificKey.GetValueNames());
                                string classValue = specificKey.GetValue("Class") as string;
                                if (!string.IsNullOrEmpty(classValue))
                                {
                                    string loadValue = string.Empty;
                                    System.Reflection.Assembly processorAssembly = null;
                                    if (names.Contains("Assembly"))
                                    {
                                        loadValue = specificKey.GetValue("Assembly") as string;
                                        if (!string.IsNullOrEmpty(loadValue))
                                        {
                                            //the assembly must be installed in the GAC
                                            processorAssembly = System.Reflection.Assembly.Load(loadValue);
                                        }
                                    }
                                    else if (names.Contains("CodeBase"))
                                    {
                                        loadValue = specificKey.GetValue("CodeBase") as string;
                                        if (!string.IsNullOrEmpty(loadValue))
                                        {
                                            //loading local assembly
                                            processorAssembly = System.Reflection.Assembly.LoadFrom(loadValue);
                                        }
                                    }
                                    if (processorAssembly == null)
                                    {
                                        throw new Exception("Directive Processor not found");
                                    }
                                    Type processorType = processorAssembly.GetType(classValue);
                                    if (processorType == null)
                                    {
                                        throw new Exception("Directive Processor not found");
                                    }
                                    return processorType;
                                }
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        //if the directive processor can not be found, throw an error
                        throw new Exception("Directive Processor not found");
                    }
                }
    
                //if the directive processor is not one this host wants to support
                throw new Exception("Directive Processor not supported");
            }
    
  7. V nabídce Soubor klikněte na příkaz Uložit vše.

  8. V nabídce Sestavení klikněte na příkaz Sestavit řešení.

Testování vlastní hostitele s procesorem směrnice

Otestujete hostitele vlastní text šablony nejprve musíte napsat text šablony, která volá generované směrnice procesoru.Potom můžete spustit vlastní hostitele, předat název šablony text a ověřte směrnice správně zpracována.

Vytvoření šablony text otestovat vlastní hostitele

  1. Vytvořte textový soubor s názvem TestTemplateWithDP.tt.Můžete vytvořit soubor textového editoru, například Poznámkový blok.

  2. Text souboru přidejte následující:

    [!POZNÁMKA]

    Programovací jazyk šablony text nemusí odpovídat vlastní hostitele.

    Text Template Host Test
    
    <#@ template debug="true" inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation" #>
    <# //this is the call to the examplemodel directive in the generated directive processor #>
    <#@ DSLMinimalTest processor="DSLMinimalTestDirectiveProcessor" requires="fileName='<Your Path>\Sample.min'" provides="ExampleModel=ExampleModel" #>
    <# //uncomment this line to test that the host allows the engine to set the extension #>
    <# //@ output extension=".htm" #>
    
    <# //uncomment this line if you want to see the generated transformation class #>
    <# //System.Diagnostics.Debugger.Break(); #>
    <# //this code uses the results of the examplemodel directive #>
    <#
        foreach ( ExampleElement box in this.ExampleModel.Elements ) 
        { 
            WriteLine("Box: {0}", box.Name);
    
            foreach (ExampleElement linkedTo in box.Targets)
            {
                WriteLine("Linked to: {0}", linkedTo.Name);
            }
    
            foreach (ExampleElement linkedFrom in box.Sources)
            {
                WriteLine("Linked from: {0}", linkedFrom.Name);
            }
    
            WriteLine("");
        } 
    #>
    
    Text Template Host Test
    
    <#@ template debug="true" language="VB" inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation" #>
    
    <# 'this is the call to the examplemodel directive in the generated directive processor #>
    <#@ DSLMinimalTest processor="DSLMinimalTestDirectiveProcessor" requires="fileName='<Your Path>\Sample.min'" provides="ExampleModel=ExampleModel" #>
    
    <# 'Uncomment this line to test that the host allows the engine to set the extension. #>
    <# '@ output extension=".htm" #>
    
    <# 'Uncomment this line if you want to see the generated transformation class. #>
    <# 'System.Diagnostics.Debugger.Break() #>
    
    <# 'this code uses the results of the examplemodel directive #>
    
    <#    
       For Each box as ExampleElement In Me.ExampleModel.Elements 
    
           WriteLine("Box: {0}", box.Name)
    
            For Each LinkedTo as ExampleElement In box.Targets
                WriteLine("Linked to: {0}", LinkedTo.Name)
            Next
    
            For Each LinkedFrom as ExampleElement In box.Sources
                WriteLine("Linked from: {0}", LinkedFrom.Name)
            Next
    
            WriteLine("")
    
       Next 
    #>
    
  3. V kódu nahraďte < vaše cesta > Cesta souboru Sample.min z návrhu zvláštní jazyk, který jste vytvořili v prvním postupu.

  4. Soubor uložte a zavřete.

Testovat vlastní hostitele

  1. Otevřete okno příkazového řádku.

  2. Zadejte cestu ke spustitelnému souboru vlastního hostitele, ale klávesu ENTER ještě.

    Zadejte například:

    <YOUR PATH>CustomHost\bin\Debug\CustomHost.exe

    [!POZNÁMKA]

    Namísto zadávání adresy můžete vyhledat soubor CustomHost.exe v Průzkumník Windowsa pak přetažením souboru do okna příkazového řádku.

  3. Zadejte mezeru.

  4. Zadejte cestu k souboru šablony text a stiskněte klávesu ENTER.

    Zadejte například:

    <YOUR PATH>TestTemplateWithDP.txt

    [!POZNÁMKA]

    Namísto zadávání adresy můžete vyhledat soubor TestTemplateWithDP.txt v Průzkumník Windowsa pak přetažením souboru do okna příkazového řádku.

    Vlastní hostitelské aplikaci spustí a spustí proces transformace textu šablony.

  5. V Průzkumník Windows, vyhledejte složku obsahující soubor TestTemplateWithDP.txt.

    Složka obsahuje také soubor TestTemplateWithDP1.txt.

  6. Otevřete tento soubor výsledky transformace textu šablony.

    Výsledky výstup generovaný text se objeví a by měla vypadat takto:

    Text Template Host Test
    
    
    Box: ExampleElement1
    Linked to: ExampleElement2
    
    Box: ExampleElement2
    Linked from: ExampleElement1
    

Viz také

Úkoly

Názorný postup: Vytváření vlastní Text šablony hostitele