Aracılığıyla paylaş


Özel mimari doğrulama katmanı Diyagram ekleme

İçinde Visual Studio Ultimate ve Visual Studio Premium, kullanıcıları kaynak kodunda doğrulamak bir Visual Studio karşı bir katman modeli kaynak kodun katman diyagramı üzerinde bağımlılıklara uyduğunu doğrulamak böylece proje.Standart doğrulama algoritması vardır, ancak kendi doğrulama uzantıları için tanımladığınız Visual Studio Ultimate ve Visual Studio Premium.

Kullanıcı seçtiğinde Mimariyi Doğrula standart doğrulama yöntemi çağrıldığında, önceden yüklenmiş herhangi bir doğrulama uzantıları tarafından izlenen bir Katman diyagramında komutu.

[!NOT]

Bir katman diyagramındaki doğrulama uml diyagramları doğrulama aynı değildir.Bir katman diyagramı ana amacı diyagramı program kodunu diğer bölümlerinde çözümü ile karşılaştırmak için yapmaktır.

İçine bir Visual Studio Tümleştirme Uzantısı (diğer dağıtmak, VSIX), katman doğrulama uzantınızı paketleyebilirsiniz Visual Studio Ultimate kullanıcılar.Doğrulayıcı, bir VSIX kendisi tarafından yerleştirebilir veya olarak diğer uzantıları aynı VSIX içinde birleştirebilirsiniz.Doğrulayıcının kodunu kendi yazsın Visual Studio başka bir uzantısı olarak değil aynı projede proje.

Uyarı notuUyarı

Doğrulama projesi oluşturduktan sonra kopyalama kod örneği sonunda, bu konu ve kendi için gerektiğini sonra Düzenle.

Gereksinimler

  • Visual Studio Ultimate

  • Visual Studio SDK

  • Visual Studio Görselleştirme ve modelleme sdk

Yeni bir VSIX katman doğrulayıcısı tanımlama

Bir doğrulayıcı oluşturmanın en hızlı yöntemi proje şablonu kullanmaktır.Bu, aynı projeye kod ve VSIX bildirimini yerleştirir.

Proje şablonu kullanarak bir uzantısı tanımlamak için

  1. Kullanarak yeni bir çözüm içindeki bir proje oluşturma Yeni bir proje komutunu Dosya menüsü.

  2. İçinde Yeni bir proje iletişim kutusunda, altında Modelleme projeleri, select Katman Tasarımcısı doğrulama uzantısı.

    Şablon küçük bir örnek içeren bir proje oluşturur.

    Uyarı notuUyarı

    Uygun şablonu yapmak için:

    • Yapılan düzenleme LogValidationError isteğe bağlı bağımsız değişkenleri kaldırmak için errorSourceNodes ve errorTargetNodes.

    • Özel özellikleri kullanırsanız, belirtilen güncelleştirmeyi Özel Özellikler bir katman Diyagram ekleme.Ayrıca, bir model çözüm açmadan önce Mimari Gezgini'ni açın.

  3. Doğrulamanızı tanımlayacağınız kodunu düzenleyin.Daha fazla bilgi için bkz: Doğrulama programlama.

  4. Uzantının test etmek için bkz: Hata ayıklama katman doğrulama.

    [!NOT]

    Yalnızca belirli durumlarda yönteminizi çağrılacak ve kesme noktalarını otomatik olarak çalışmaz.Daha fazla bilgi için bkz: Hata ayıklama katman doğrulama.

  5. Ana örneği uzantısı yüklemek için Visual Studio, veya başka bir bilgisayarda, .vsix , dosya bin\*.Yüklemek istediğiniz bilgisayara kopyalayın ve sonra çift tıklatın.Onu kaldırmak için Uzantı Yöneticisi üzerinde araçları menü.

Katman doğrulama için ayrı bir VSIX ekleme

Katman doğrulayıcıları, komutları ve diğer uzantıları içeren bir VSIX oluşturmak istiyorsanız, VSIX tanımlamak için bir proje ve işleyicileri için ayrı projeler oluşturmanız önerilir.Diğer modelleme uzantı türleri hakkında daha fazla bilgi için bkz: UML Modellerini ve Diyagramları Genişletme.

Katman doğrulama için ayrı bir VSIX eklemek için

  1. Sınıf kitaplığı oluşturmak varolan veya yeni bir proje Visual Studio Ultimate çözüm.İçinde Yeni bir proje iletişim kutusunda, tıklatın Visual C#Class Library.Bu proje katman doğrulama sınıfı içerir.

  2. Çözümünüze bir VSIX projesi oluşturun veya tanımlayın.Bir VSIX projesi adlı bir dosya içerir source.extension.vsixmanifest.Bir VSIX projesine eklemeniz gerekiyorsa, aşağıdaki adımları izleyin:

    1. İçinde Yeni bir proje iletişim kutusunda, seçim Visual C#, genişletilebilirlik, VSIX proje.

    2. İçinde Çözüm Gezgini, kısayol menüsünde VSIX projesinin başlangıç projesi olarak ayarla.

  3. İçinde source.extension.vsixmanifestaltında varlıklarını, bir mef bileşeni olarak katman doğrulama projesi ekleyin:

    1. Seçim Yeni.

    2. İçinde Ekleme yeni kıymet iletişim kutusunda, küme:

      Türü = Microsoft.VisualStudio.MefComponent

      Kaynak = Geçerli çözümde bir proje

      Proje = doğrulayıcısı projeniz

  4. Ayrıca bir katman doğrulama eklemelisiniz:

    1. Seçim Yeni.

    2. İçinde Ekleme yeni kıymet iletişim kutusunda, küme:

      Türü = Microsoft.VisualStudio.ArchitectureTools.Layer.Validator.Bu aşağı açılan listesindeki seçeneklerden biri değil.Klavyeden girmelisiniz.

      Kaynak = Geçerli çözümde bir proje

      Proje = doğrulayıcısı projeniz

  5. Katman doğrulama projeye dönün ve aşağıdaki proje başvurularını ekleyin:

    Reference

    Ne yapmanıza izin verir

    Microsoft.VisualStudio.GraphModel.dll

    Okuma Mimarisi grafiği

    Microsoft.VisualStudio.ArchitectureTools.Extensibility.CodeSchema.dll

    Kod dom katmanları ile ilişkili okuyun

    Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer.dll

    Katman modeli okuma

    Microsoft.VisualStudio.ArchitectureTools.Extensibility

    Okuma ve şekilleri ve diyagramları güncelleyebilir.

    System.ComponentModel.Composition

    Yönetilen Genişletilebilirlik Çerçevesi (mef) kullanarak doğrulama bileşeni tanımlamak

    Microsoft.VisualStudio.Modeling.Sdk.11.0

    Modelleme uzantılarını tanımlayın

  6. Doğrulayıcı kitaplığı projesi, doğrulama kodunu içeren sınıf dosyasında bu konunun sonundaki örnek kodu kopyalayın.Daha fazla bilgi için bkz: Doğrulama programlama.

  7. Uzantının test etmek için bkz: Hata ayıklama katman doğrulama.

    [!NOT]

    Yalnızca belirli durumlarda yönteminizi çağrılacak ve kesme noktalarını otomatik olarak çalışmaz.Daha fazla bilgi için bkz: Hata ayıklama katman doğrulama.

  8. VSIX ana örneği yüklemek için Visual Studio, veya başka bir bilgisayarda, .vsix , dosya bin VSIX projesinin dizin.VSIX yüklemek istediğiniz bilgisayara kopyalayın.Windows Gezgini'nde VSIX dosyasını çift tıklatın.(8 Windows Explorer dosya).

    Onu kaldırmak için Uzantı Yöneticisi üzerinde araçları menü.

Programlama doğrulama

Katman doğrulama uzantısı tanımlamak için aşağıdaki özelliklere sahip bir sınıf tanımlayın:

  • Bildirimi genel biçimi aşağıdaki gibidir:

    
    using System.ComponentModel.Composition;
    using Microsoft.VisualStudio.ArchitectureTools.Extensibility.CodeSchema;
    using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer;
    using Microsoft.VisualStudio.GraphModel;
    ...
     [Export(typeof(IValidateArchitectureExtension))]
      public partial class Validator1Extension :
                      IValidateArchitectureExtension
      {
        public void ValidateArchitecture(Graph graph)
        {
           GraphSchema schema = graph.DocumentSchema;
          ...
      } }
    
  • Hata keşfettiğinizde, bunu kullanarak bildirebilirsiniz LogValidationError().

    Uyarı notuUyarı

    İsteğe bağlı parametreleri kullanmayın LogValidationError.

Ne zaman kullanıcı çağırır Mimariyi Doğrula menü komutu, katmanları ve bir grafik oluşturmak için kendi yapıları katman çalışma zamanı sistemi analizleri yaparken.Grafik dört bölümden oluşur:

  • Katman modellerini Visual Studio çözüm düğümler ve bağlantılar grafik olarak temsil edilir.

  • Kodu, proje öğeleri ve diğer yapıların çözüm içinde tanımlanan ve düğümleri ve çözümleme işlemi tarafından keşfedilen bağımlılıkları gösteren bağlantılar olarak gösterilir.

  • Kod yapısı düğümlerinin katman düğümlerinden bağlantılar.

  • Doğrulayıcı tarafından bulunan hataları temsil eden düğümleri.

Grafik inşa standart doğrulama yöntemi denir.Bu tamamlandığında, tüm yüklenmiş uzantı doğrulama yöntemleri belirtilmemiş sırayla verilir.Grafik, geçirilen kadar her ValidateArchitecture grafik tarama ve bulduğu herhangi bir hata raporu yöntemi.

[!NOT]

Bu uml diyagramları için uygulanan doğrulama işlemi ile aynı değildir ve bu etki alanına özgü dil kullanılan doğrulama işlemi ile aynı değildir.

Doğrulama yöntemlerinin katman modeli veya geçerliliği kod değiştirmemelisiniz.

Grafik model içinde tanımlanan Microsoft.VisualStudio.GraphModel.Asıl kendi sınıfları GraphNode ve GraphLink.

Her düğüm ve bağlantı her öğe veya onu temsil eden ilişki türünü belirten bir veya daha fazla kategori vardır.Normal bir grafikte düğümler aşağıdaki kategorileri vardır:

  • Dsl.LayerModel

  • Dsl.Layer

  • Dsl.Reference

  • CodeSchema_Type

  • CodeSchema_Namespace

  • CodeSchema_Type

  • CodeSchema_Method

  • CodeSchema_Field

  • CodeSchema_Property

Kod içindeki öğelere bağlantılar katmanlardan "Temsil" kategorisi vardır.

Doğrulama hata ayıklama

Katman doğrulama uzantınızı hata ayıklamak için ctrl + F5 tuşlarına basın.Deneysel örneği Visual Studio açar.Bu örnekte, bir katman modeli oluşturun veya açın.Bu model kodu ile ilişkilendirilmiş olması gerekir ve en az bir bağımlılığı olmalıdır.

Ff657807.collapse_all(tr-tr,VS.110).gifBağımlılıklar içeren bir çözüm ile test

Doğrulama özellikleri var olmadığı sürece yürütülmez:

  • Katman diyagramı üzerinde en az bir bağımlılık bağlantısı yoktur.

  • Kod öğeleri ile ilişkili olan Katmanlar modeli vardır.

Deneysel örneği başlatılan ilk kez Visual Studio doğrulama uzantınızı test etmek için açın veya bu özelliklere sahip bir çözüm oluşturun.

Ff657807.collapse_all(tr-tr,VS.110).gifÖnce çalışma temiz çözüm mimarisi Doğrula

Doğrulama kodunuz güncelleştirdiğinizde, kullanın Temiz çözüm komutunu Yapı menüsündeki Doğrulama komutu sınamadan önce deneysel çözüm.Doğrulama sonuçlarını önbelleğe alındığı için bu gereklidir.Doğrulama yöntemleri test katman diyagramı veya kendi kod gerçekleştirmediyseniz yürütülmez.

Ff657807.collapse_all(tr-tr,VS.110).gifAçıkça hata ayıklayıcısını Başlat

Doğrulama ayrı bir işlemde çalıştırır.Bu nedenle, kendi doğrulama yönteminde kesme tetiklenir değil.Doğrulama başladığında, işleme hata ayıklayıcı açıkça iliştirmelisiniz.

Doğrulama işlemi için hata ayıklayıcı için bir çağrı yerleştirmeye System.Diagnostics.Debugger.Launch() doğrulama yönteminizi başında.Hata ayıklama iletişim kutusu görüntülendiğinde, ana örneğini seçin Visual Studio.

Alternatif olarak, bir çağrı yerleştirmeye System.Windows.Forms.MessageBox.Show().İleti kutusu görüntülendiğinde, ana örneğine gidin Visual Studio ve hata ayıklama menüsünü tıklatın İşleme Ekle. Adlandırılmış İşlem Graphcmd.exe.

Her zaman ctrl + F5 tuşuna basarak deneysel örneği başlar (hata ayıklama olmadan Başlat).

Ff657807.collapse_all(tr-tr,VS.110).gifBir doğrulama uzantısı dağıtma

Kendi doğrulama uzantısı olan bir bilgisayara yüklemek için Visual Studio Ultimate veya Visual Studio Premium olan yüklü, hedef bilgisayarda VSIX dosyası açın.Bağımlı olduğu bir bilgisayara yüklemek için Team Foundation Yapısı olan yüklü, siz el ile VSIX içeriği uzantıları bir klasöre ayıklamanız gerekir.Daha fazla bilgi için bkz. Uzantısı model katmanı dağıtma.

Kod örneği

using System;
using System.ComponentModel.Composition;
using System.Globalization;
using System.Linq;
using System.Text.RegularExpressions;
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.CodeSchema;
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer;
using Microsoft.VisualStudio.GraphModel;

namespace Validator3
{
    [Export(typeof(IValidateArchitectureExtension))]
    public partial class Validator3Extension : IValidateArchitectureExtension
    {
        /// <summary>
        /// Validate the architecture
        /// </summary>
        /// <param name="graph">The graph</param>
        public void ValidateArchitecture(Graph graph)
        {
            if (graph == null) throw new ArgumentNullException("graph");

            // Uncomment the line below to debug this extension during validation
            // System.Windows.Forms.MessageBox.Show("Attach 2 to GraphCmd.exe with process id " + System.Diagnostics.Process.GetCurrentProcess().Id);


            // Get all layers on the diagram
            foreach (GraphNode layer in graph.Nodes.GetByCategory("Dsl.Layer"))
            {
                System.Threading.Thread.Sleep(100);
                // Get the required regex property from the layer node
                string regexPattern = "^[a-zA-Z]+$"; //layer[customPropertyCategory] as string;
                if (!string.IsNullOrEmpty(regexPattern))
                {
                    Regex regEx = new Regex(regexPattern);

                    // Get all referenced types in this layer including those from nested layers so each
                    // type is validated against all containing layer constraints.
                    foreach (GraphNode containedType in layer.FindDescendants().Where(node => node.HasCategory("CodeSchema_Type")))
                    {
                        // Check the type name against the required regex                        
                        CodeGraphNodeIdBuilder builder = new CodeGraphNodeIdBuilder(containedType.Id, graph);
                        string typeName = builder.Type.Name;
                        if (!regEx.IsMatch(typeName))
                        {
                            // Log an error
                            string message = string.Format(CultureInfo.CurrentCulture, Resources.InvalidTypeNameMessage, typeName);
                            this.LogValidationError(graph, typeName + "TypeNameError", message, GraphErrorLevel.Error, layer);
                        }
                    }
                }

            }

        }
    }
}

Ayrıca bkz.

Kavramlar

Katman diyagramları genişletme