2017-01-20 14 views
5

Visual Studio 2015'te (ve bazı eski sürümlerde) C# kodunu ayıklarken, çeşitli görselleştiricilerde (Metin, XML, HTML, JSON) string değişkenlerinin değerlerini bir büyüteç simgesine sahip bir açılır liste aracılığıyla görüntülemek mümkündür . Bu ayrıca, dize olmayan bazı türlerde de çalışır; örneğin, System.Xml.Linq.XElement. Kendi yerleşik türümün bir değişkeninin değerini görüntülemek için bu yerleşik görselleştiricilerin kullanılması mümkün mü?Özel türler için Visual Studio Text Görüntüleyici nasıl kullanılır?

Bağlam:

çabuk kabul edilebilir sadece çok hatlı metin ortamında görüntülenebilir karmaşık bir özel tip durumunu kontrol etmek gerekiyor

.

+0

Belki [ayıklayıcı görüntüleme vekil] (https://msdn.microsoft.com/en-us/library/d8eyd8zc.aspx) sizin durumunda yararlı olabilir? –

cevap

3

Sorunuzu doğru anlıyorsanız, o zaman ne elde edersiniz? DebuggerTypeProxy ile. Karmaşık türünüzün nesnelerini incelediğinizde hata ayıklayıcının bir proxy nesnesi oluşturup görüntülemesine neden olur.

Aşağıdaki örnekte proxy nesnesi, metin görselleştiricisi ile görüntüleyebileceğiniz bir (çok satırlı) dize özelliği içerir. Eğer hala alttaki nesnenin kendisine bakmanız gerekiyorsa, o zaman Raw view düğmesinin ne için olduğu budur.

[DebuggerTypeProxy(typeof(ComplexTypeProxy))] 
class ComplexType 
{ 
    // complex state 
} 

class ComplexTypeProxy 
{ 
    public string Display 
    { 
     get { return "Create a multi-line representation of _content's complex state here."; } 
    } 

    private ComplexType _content; 

    public ComplexTypeProxy(ComplexType content) 
    { 
     _content = content; 
    } 
} 
+0

Evet, tam olarak bunu yapmaya çalışıyorum. Ek bir tıklama biraz can sıkıcı, ama bununla yaşayabilirim. System.Xml.Linq.XElement'in davranışlarım için bana ideal bir umut verdi, ama sanırım bu tür bir metin benzeri görselleştiricilere bir şekilde kodlanmış. – user98418468459

0

Evet yapabilirsiniz. Seçeneklerden biri kim belirler ve en iyi Ayrıca tip bir görüntülendiğinde nasıl görüneceğini belirtmek için, bu türde çalışma zamanı davranışını anlar DebuggerDisplayAttribute

Debugger ekran nitelikleri tip geliştiricisi izin kullanmaktır ayıklayıcı.

[DebuggerDisplay("The count value in my class is: {count}")] 
class MyClass 
{ 
    public int count { get; set; } 
} 

DÜZENLEME: Ne istediğini anlamış açıklama sonrasında. Özel çok hatlı Visualiser yapmak mümkündür, ancak muhtemelen bunu yapmanın yolu :)

  1. Sen Microsoft.VisualStudio.DebuggerVisualizers.dll başvuru eklemek gerekir sevmiyorum. Add Reference -> Assemblies -> Extensions listesinden
  2. 'u buldum. Yeni sınıf oluşturmanız ve DialogDebuggerVisualizer sınıfını miras almanız gerekiyor. Göster yöntemini geçersiz kıl ve gerekli içeriği göster.
  3. Mark sınıf özel Görselleştirici'ye İşte

-Serializible

  • Add referans örnek kod olarak:

    using System.Windows.Forms; 
    using Microsoft.VisualStudio.DebuggerVisualizers; 
    [assembly: DebuggerVisualizer(typeof(MyClassVisualizer), Target = typeof(MyClass), Description = "My Class Visualizer")] 
    
    namespace MyNamespace 
    { 
        [Serializable] 
        public class MyClass 
        { 
         public int count { get; set; } = 5; 
        } 
    
        public class MyClassVisualizer : DialogDebuggerVisualizer 
        { 
         protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider) 
         { 
          MyClass myClass = objectProvider.GetObject() as MyClass; 
    
          if (objectProvider.IsObjectReplaceable && myClass != null) 
          { 
           StringBuilder sb = new StringBuilder(); 
           sb.AppendLine("Here is"); 
           sb.AppendLine("your multi line"); 
           sb.AppendLine("visualizer"); 
           sb.AppendLine($"of MyClass with count = {myClass.count}"); 
    
           MessageBox.Show(sb.ToString()); 
          } 
         } 
        } 
    } 
    
    Sonra

    Eğer büyüteç göreceksiniz ve bunu tıkladığınızda sonuç bakacağız Bunun gibi: enter image description here

  • +0

    Değeri tek bir satırda görüntülemek için - evet. Çok satırlı (çok satırlı olarak görünür) - hayır. – user98418468459

    +0

    Ahh ne hakkında konuştuğunuzu anlamak için biraz zaman aldı: D – Reniuz

    +0

    @ user98418468459 Cevabı düzenledim.Enjoy :) – Reniuz