Návod: Připojení hostitele k procesoru vygenerovaných direktiv
Můžete napsat vlastního hostitele, který zpracovává textové šablony. Základní vlastní hostitel je ukázaný v návodu: Vytvoření vlastního hostitele textové šablony. Tento hostitel můžete rozšířit o přidání funkcí, jako je generování více výstupních souborů.
V tomto názorném postupu rozbalíte vlastního hostitele tak, aby podporoval textové šablony, které volají procesory direktiv. Když definujete jazyk specifický pro doménu, vygeneruje procesor direktiv pro doménový model. Procesor direktiv usnadňuje uživatelům psaní šablon, které přistupujících k modelu, což snižuje potřebu psát direktivy sestavení a importu do šablon.
Poznámka:
Tento názorný postup vychází z návodu: Vytvoření vlastního hostitele textových šablon. Nejprve proveďte tento názorný postup.
Tento návod zahrnuje následující úlohy:
Použití jazykových nástrojů specifických pro doménu k vygenerování procesoru direktiv založeného na doménovém modelu.
Připojení hostitele vlastní textové šablony do vygenerovaného procesoru direktiv.
Testování vlastního hostitele pomocí vygenerovaného procesoru direktiv
Požadavky
Chcete-li definovat DSL, musíte mít nainstalované následující součásti:
Komponenta | Odkaz |
---|---|
Visual Studio | http://go.microsoft.com/fwlink/?LinkId=185579 |
Visual Studio SDK | http://go.microsoft.com/fwlink/?LinkId=185580 |
Visual Studio Visualization and Modeling SDK |
Poznámka:
Komponenta Transformace textové šablony se automaticky nainstaluje jako součást sady funkcí vývoje rozšíření sady Visual Studio. Můžete ho také nainstalovat z karty Jednotlivé komponenty Instalační program pro Visual Studio v kategorii sad SDK, knihoven a architektur. Nainstalujte komponentu Modeling SDK z karty Jednotlivé komponenty .
Kromě toho musíte mít vytvořenou transformaci vlastní textové šablony v návodu: Vytvoření vlastního hostitele textové šablony.
Použití jazykových nástrojů specifických pro doménu k vygenerování procesoru direktiv
V tomto názorném postupu použijete Průvodce návrhářem jazyka specifický pro doménu k vytvoření jazyka specifického pro doménu pro řešení DSLMinimalTest.
Vytvořte jazykové řešení specifické pro doménu, které má následující charakteristiky:
Název: DSLMinimalTest
Šablona řešení: Minimální jazyk
Přípona souboru: min
Název společnosti: Fabrikam
Další informace o vytvoření jazykového řešení specifického pro doménu najdete v tématu Postupy: Vytvoření jazykového řešení specifického pro doménu.
V nabídce Sestavení klikněte na Sestavit řešení.
Důležité
Tento krok vygeneruje procesor direktiv a přidá klíč pro něj v registru.
V nabídce Ladit klikněte na Spustit ladění.
Otevře se druhá instance sady Visual Studio.
V experimentálním buildu v Průzkumník řešení poklikejte 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 propojení mezi nimi.
Zavřete druhou instanci sady Visual Studio.
Uložte řešení a zavřete Návrhář jazyka specifický pro doménu.
Připojení vlastního hostitele textové šablony na procesor direktiv
Po vygenerování procesoru direktiv připojíte procesor direktiv a hostitele vlastní textové šablony, kterého jste vytvořili v návodu: Vytvoření vlastního hostitele textové šablony.
Otevřete řešení CustomHost.
V nabídce Projekt klepněte na tlačítko Přidat odkaz.
Otevře se dialogové okno Přidat odkaz s zobrazenou kartou .NET .
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
V horní části souboru Program.cs nebo Module1.vb přidejte následující řádek kódu:
Vyhledejte kód vlastnosti
StandardAssemblyReferences
a nahraďte ho následujícím kódem:Poznámka:
V tomto kroku přidáte odkazy na sestavení vyžadovaná vygenerovaným procesorem direktiv, který bude váš hostitel podporovat.
//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 }; } }
Vyhledejte kód funkce
ResolveDirectiveProcessor
a nahraďte ho následujícím kódem:Důležité
Tento kód obsahuje pevně zakódované odkazy na název vygenerovaného procesoru direktiv, ke kterému se chcete připojit. Tento postup můžete snadno zobecnit, v takovém případě hledá všechny procesory direktiv uvedené v registru a pokusí se najít shodu. V takovém případě by hostitel fungoval s jakýmkoli vygenerovaným procesorem direktiv.
//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"); }
V nabídce File (Soubor) klikněte na Save All (Uložit vše).
V nabídce Sestavení klikněte na Sestavit řešení.
Testování vlastního hostitele pomocí procesoru direktiv
Pokud chcete otestovat hostitele vlastní textové šablony, musíte nejprve napsat textovou šablonu, která volá vygenerovaný procesor direktiv. Potom spustíte vlastního hostitele, předáte mu název textové šablony a ověříte, že se direktiva zpracuje správně.
Vytvoření textové šablony pro otestování vlastního hostitele
Vytvořte textový soubor a pojmenujte ho
TestTemplateWithDP.tt
. K vytvoření souboru můžete použít libovolný textový editor, například Poznámkový blok.Do tohoto textového souboru přidejte následující text:
Poznámka:
Programovací jazyk textové šablony nemusí odpovídat programovacímu jazyku vlastního 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(""); } #>
V kódu nahraďte <CESTU> cestou k souboru Sample.min z jazyka specifického pro návrh, který jste vytvořili v prvním postupu.
Soubor uložte a zavřete.
Testování vlastního hostitele
Otevřete okno příkazového řádku.
Zadejte cestu ke spustitelnému souboru vlastního hostitele, ale zatím nemačkejte klávesu ENTER.
Zadejte například:
<YOUR PATH>CustomHost\bin\Debug\CustomHost.exe
Poznámka:
Místo zadávání adresy můžete přejít na soubor CustomHost.exe v Průzkumníku Windows a potom soubor přetáhnout do okna příkazového řádku.
Zadejte mezeru.
Zadejte cestu k souboru textové šablony a stiskněte klávesu ENTER.
Zadejte například:
<YOUR PATH>TestTemplateWithDP.txt
Poznámka:
Místo zadávání adresy můžete v Průzkumníku Windows přejít na soubor TestTemplateWithDP.txt a potom soubor přetáhnout do okna příkazového řádku.
Vlastní hostitelská aplikace se spustí a spustí proces transformace textové šablony.
V Průzkumníku Windows přejděte do složky, která obsahuje soubor TestTemplateWithDP.txt.
Složka obsahuje také soubor TestTemplateWithDP1.txt.
Otevřete tento soubor a podívejte se na výsledky transformace textové šablony.
Zobrazí se výsledky vygenerovaného textového výstupu a měly by vypadat takto:
Text Template Host Test Box: ExampleElement1 Linked to: ExampleElement2 Box: ExampleElement2 Linked from: ExampleElement1