Aracılığıyla paylaş


İzlenecek yol: Konağı Oluşturulan bir Yönerge İşlemcisine Bağlama

Metin şablonlarını işleyen kendi konağınızı yazabilirsiniz. İzlenecek Yol: Özel Metin Şablonu Ana Bilgisayarı Oluşturma bölümünde temel bir özel konak gösterilmektedir. Birden çok çıkış dosyası oluşturma gibi işlevler eklemek için bu konağı genişletebilirsiniz.

Bu kılavuzda, yönerge işlemcilerini çağıran metin şablonlarını destekleyecek şekilde özel ana bilgisayarınızı genişletirsiniz. Etki alanına özgü bir dil tanımladığınızda, etki alanı modeli için bir yönerge işlemcisi oluşturur. Yönerge işlemcisi, kullanıcıların modele erişen şablonlar yazmasını kolaylaştırarak şablonlarda derleme ve içeri aktarma yönergeleri yazma gereksinimini azaltır.

Not

Bu izlenecek yol, İzlenecek Yol: Özel Metin Şablonu Konağı Oluşturma'da oluşturulur. Önce bu kılavuzu gerçekleştirin.

Bu izlenecek yol aşağıdaki görevleri içerir:

  • Etki alanı modeline dayalı bir yönerge işlemcisi oluşturmak için Etki Alanına Özgü Dil Araçları'nı kullanma.

  • Oluşturulan yönerge işlemcisine özel bir metin şablonu konağı Bağlan.

  • Oluşturulan yönerge işlemcisiyle özel konağı test etme.

Önkoşullar

DSL tanımlamak için aşağıdaki bileşenleri yüklemiş olmanız gerekir:

Bileşen Bağlantı
Visual Studio http://go.microsoft.com/fwlink/?LinkId=185579
Visual Studio SDK http://go.microsoft.com/fwlink/?LinkId=185580
Visual Studio Görselleştirme ve Modelleme SDK'sı

Not

Metin Şablonu Dönüştürme bileşeni, Visual Studio uzantısı geliştirme iş yükünün bir parçası olarak otomatik olarak yüklenir. Ayrıca Visual Studio Yükleyicisi Tek tek bileşenler sekmesinden SDK'lar, kitaplıklar ve çerçeveler kategorisinin altından da yükleyebilirsiniz. Tek tek bileşenler sekmesinden Modelleme SDK'sı bileşenini yükleyin.

Ayrıca, İzlenecek Yol: Özel Metin Şablonu Ana Bilgisayarı Oluşturma bölümünde özel metin şablonu dönüşümü oluşturmanız gerekir.

Yönerge İşlemcisi Oluşturmak için Etki Alanına Özgü Dil Araçlarını Kullanma

Bu kılavuzda, DSLMinimalTest çözümü için etki alanına özgü bir dil oluşturmak üzere Etki Alanına Özgü Dil Tasarım Aracı Sihirbazı'nı kullanacaksınız.

  1. Aşağıdaki özelliklere sahip etki alanına özgü bir dil çözümü oluşturun:

    • Ad: DSLMinimalTest

    • Çözüm şablonu: En Az Dil

    • Dosya uzantısı: min

    • Şirket adı: Fabrikam

    Etki alanına özgü dil çözümü oluşturma hakkında daha fazla bilgi için bkz . Nasıl yapılır: Etki Alanına Özgü Dil Çözümü Oluşturma.

  2. Yapı menüsünde Yapı Çözümü’ne tıklayın.

    Önemli

    Bu adım yönerge işlemcisini oluşturur ve bunun anahtarını kayıt defterine ekler.

  3. Hata ayıkla menüsünde Hata Ayıklamayı Başlat’a tıklayın.

    Visual Studio'nun ikinci bir örneği açılır.

  4. Deneysel derlemedeki Çözüm Gezgini sample.min dosyasına çift tıklayın.

    Dosya tasarımcıda açılır. Modelde ExampleElement1 ve ExampleElement2 olmak üzere iki öğe ve bunlar arasında bir bağlantı olduğuna dikkat edin.

  5. Visual Studio'nun ikinci örneğini kapatın.

  6. Çözümü kaydedin ve ardından Etki Alanına Özgü Dil Tasarım Aracı kapatın.

Yönerge İşlemcisine Özel Metin Şablonu Konağı Bağlan

Yönerge işlemcisini oluşturduktan sonra yönerge işlemcisini ve İzlenecek Yol: Özel Metin Şablonu Ana Bilgisayarı Oluşturma bölümünde oluşturduğunuz özel metin şablonu konasını bağlarsınız.

  1. CustomHost çözümünü açın.

  2. Proje menüsünde Başvuru Ekle'ye tıklayın.

    Başvuru Ekle iletişim kutusu açılır ve .NET sekmesi görüntülenir.

  3. Aşağıdaki başvuruları ekleyin:

    • 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. Program.cs veya Module1.vb dosyasının en üstüne aşağıdaki kod satırını ekleyin:

    using Microsoft.Win32;
    
  5. özelliğinin StandardAssemblyReferenceskodunu bulun ve aşağıdaki kodla değiştirin:

    Not

    Bu adımda, ana bilgisayarınızın destekleyeceğini oluşturulan yönerge işlemcisi tarafından gerekli olan derlemelere başvurular eklersiniz.

    //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. işlevinin ResolveDirectiveProcessorkodunu bulun ve aşağıdaki kodla değiştirin:

    Önemli

    Bu kod, bağlanmak istediğiniz oluşturulan yönerge işlemcisinin adına sabit kodlanmış başvurular içerir. Bunu kolayca daha genel hale getirebilirsiniz; bu durumda kayıt defterinde listelenen tüm yönerge işlemcilerini arar ve bir eşleşme bulmaya çalışır. Bu durumda, ana bilgisayar oluşturulan herhangi bir yönerge işlemcisi ile çalışır.

    //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. Dosya menüsünde Tümünü Kaydet’e tıklayın.

  8. Yapı menüsünde Yapı Çözümü’ne tıklayın.

Yönerge İşlemcisi ile Özel Konağı Test Edin

Özel metin şablonu ana bilgisayarını test etmek için, önce oluşturulan yönerge işlemcisini çağıran bir metin şablonu yazmanız gerekir. Ardından özel konağı çalıştırır, ona metin şablonunun adını geçirir ve yönergenin doğru işlendiğini doğrularsınız.

Özel konağı test etmek için metin şablonu oluşturma

  1. Bir metin dosyası oluşturun ve adını verin TestTemplateWithDP.tt. Dosyayı oluşturmak için Not Defteri gibi herhangi bir metin düzenleyicisi kullanabilirsiniz.

  2. Aşağıdakileri metin dosyasına ekleyin:

    Not

    Metin şablonunun programlama dilinin özel konağın diliyle eşleşmesi gerekmez.

    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("");
        }
    #>
    
  3. Kodda, YOLUNUZ> öğesini ilk yordamda oluşturduğunuz tasarıma özgü dilden Sample.min dosyasının yoluyla değiştirin<.

  4. Dosyayı kaydedip kapatın

Özel konağı test edin

  1. Bir Komut İstemi penceresi açın.

  2. Özel ana bilgisayar için yürütülebilir dosyanın yolunu yazın, ancak henüz ENTER'a basmayın.

    Örneğin, şunu yazın:

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

    Not

    Adresi yazmak yerine, Windows Gezgini'nde CustomHost.exe dosyasına göz atabilir ve ardından dosyayı Komut İstemi penceresine sürükleyebilirsiniz.

  3. Bir boşluk yazın.

  4. Metin şablonu dosyasının yolunu yazın ve ENTER tuşuna basın.

    Örneğin, şunu yazın:

    <YOUR PATH>TestTemplateWithDP.txt

    Not

    Adresi yazmak yerine, Windows Gezgini'nde TestTemplateWithDP.txt dosyasına göz atabilir ve ardından dosyayı Komut İstemi penceresine sürükleyebilirsiniz.

    Özel konak uygulaması çalışır ve metin şablonu dönüştürme işlemini başlatır.

  5. Windows Gezgini'nde TestTemplateWithDP.txt dosyasını içeren klasöre göz atın.

    Klasör, TestTemplateWithDP1.txt dosyasını da içerir.

  6. Metin şablonu dönüştürme sonuçlarını görmek için bu dosyayı açın.

    Oluşturulan metin çıkışının sonuçları görüntülenir ve şöyle görünmelidir:

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