2011-01-22 3 views
3

linq 식에 대한 디버거 비주얼라이저를 작성하려고했습니다.디버거 비주얼 라이저 [Visual Studio 2010] - System.Linq.Expressions.Expression - 돋보기가 표시되지 않습니다.

저는 이미 알고 있지만, 제 자신을 만들고 추가 기능을 추가하고 싶습니다.

이 빠른 프로토 타입을 만들었습니다. 돋보기가 표시되지 않습니다. 그러나 한 줄의 코드를 "Target = typeof (System.String)"으로 변경하면 돋보기가 나타납니다.

도움을 주시면 감사하겠습니다.

using System.IO; 
using System.Windows.Forms; 
using Microsoft.VisualStudio.DebuggerVisualizers; 

[assembly: System.Diagnostics.DebuggerVisualizer(
    typeof(VisualizerPrototype.MyDebuggerVisualizer), 
    typeof(VisualizerPrototype.MyDebuggerVisualizerObjectSource), 
    Target = typeof(System.Linq.Expressions.Expression), 
    Description = "My Debugger Visualizer")] 
namespace VisualizerPrototype 
{ 
    public class MyDebuggerVisualizer : DialogDebuggerVisualizer 
    { 
     protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider) 
     { 
      var text = string.Empty; 
      using (var sr = new StreamReader(objectProvider.GetData())) 
      { 
       text = sr.ReadToEnd(); 
      } 

      MessageBox.Show(text); 
     } 
    } 

    public class MyDebuggerVisualizerObjectSource : VisualizerObjectSource 
    { 
     public override void GetData(object target, System.IO.Stream outgoingData) 
     { 
      var sw = new StreamWriter(outgoingData); 
      sw.WriteLine("YO"); 
      sw.Flush(); 
     } 
    } 
} 

답변

2

앞으로이 문제를 읽는 사람은 내 문제의 원인을 발견했습니다. 디버거 비주얼 라이저의 대상 유형은 상속 된 유형이 아니고 런타임 유형이어야합니다.

Target = typeof(Expression<>) 
+1

이 아마도 당신이 여러 대상을 적용 할 수

Target = typeof(System.Linq.Expressions.ConstantExpression) Expression expr = Expression.Constant(1); //visualizer shows up Target = typeof(System.Linq.Expressions.Expression) Expression expr = Expression.Constant(1); //visualizer doesn't show up 
leppie

+0

예, 모든 상속 된 유형에 대해 속성을 만드는 것이 해결 방법이지만 이상적인 해결책은 아닙니다. – BSick7

0

VB:

Target = GetType(Expression(Of)) 

이 하나의 C#이 하나를 시도?

관련 문제