2010-08-13 3 views
6

Я написал собственный визуализатор отладчика.Visual Studio не загружает мой визуализатор отладчика

Это, и атрибуты, находятся в их собственной сборке. В сборке нет ссылок или атрибутов, содержащих класс, который нужно отлаживать. Я хочу создать отказоустойчивую DLL, которая является необязательной для пользователей.

Класс, который я пытаюсь отлаживать, является общим.

[Serializable] 
public class FinCellTable<S> : IFinCellTable, IEnumerable<List<FinCell.IFinCell>> 
    where S : class, FinCell.IFinHeaderCell, FinCell.IFinCell, new() 

Вот визуализатор:

[assembly: System.Diagnostics.DebuggerVisualizer(
     typeof(Financials.Debugging.CellTableVisualizer), 
     typeof(VisualizerObjectSource), 
     Target = typeof(Financials.Transformation.IFinCellTable), 
     Description = "FinCell Table Visualizer")] 
[assembly: System.Diagnostics.DebuggerVisualizer(
     typeof(Financials.Debugging.CellTableVisualizer), 
     typeof(VisualizerObjectSource), 
     Target = typeof(Financials.Transformation.FinCellTable<Financials.FinCell.FinHeaderCell>), 
     Description = "FinCell Table Visualizer")] 

namespace Financials.Debugging 
{ 
    public class CellTableVisualizer : DialogDebuggerVisualizer 
    { 
     protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider) 
     { 
      if (windowService == null) throw new ArgumentNullException("windowService"); 
      if (objectProvider == null) throw new ArgumentNullException("objectProvider"); 

      var data = (IFinCellTable)objectProvider.GetObject(); 
      using (var displayForm = new CellTableVizForm()) 
      { 
       displayForm.PopulateForm(data); 
       windowService.ShowDialog(displayForm); 
      } 
     } 
    } 
} 

Я бегу Visual Studio 2010, а следующий каталог содержит .dll и .pdb визуализатора Ассамблеи:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\Debugger\Visualizers 

I поместите точку останова на экземпляр IFinCellTable, который специально является FinCellTable. Он не показывает увеличительное стекло.

Я отлаживал Visual Studio с помощью другой Visual Studio, поскольку первая VS была отлаживаемой. Я смотрел выходное окно как первую VS-загруженную dll. Когда я вызвал визуализатор на основе данных, второй VS вывел, что он загрузил Microsoft.VisualStudio.DebuggerVisualizers.dll и Microsoft.VisualStudio.Debugger.DataSetVisualizer.dll (последний из правильного каталога, который я сказал выше). (Окно модулей ведет себя/показывает то же самое.)

Таким образом, очевидно, что сборщик отладчика Visualizer Drop-In не загружается VS, поэтому он не знает, чтобы показать увеличительное стекло.

Как вы получаете визуальную студию для загрузки визуализаторов вверх, поэтому визуализаторы визуальных изображений работают, и вам не нужно редактировать исходный код?

+0

Ничего не выпрыгивает. Вы * перезапустили VS после копирования визуализатора, правильно? –

+0

Вам нужно сделать какой-то пользовательский интерфейс или перезагрузить среду?Это необходимо для надстроек в предыдущих версиях. –

+0

Странно. Я сделал именно то, что вы здесь описали: http://www.adamjamesnaylor.com/HowToWriteADebugVisualiserInVisualStudio.aspx, и он, похоже, работал нормально. Как Мишель спрашивает, вы уверены, что это в правильной папке? Я прошу, потому что на работе моя папка пользователя Visual Studio находится на сетевом ресурсе, а VS выдает исключения безопасности при попытке доступа к общей папке. –

ответ

3

Wild guess: вы уверены, что правильные файлы находятся в C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\Debugger\Visualizers, а не в C:\Users\<you>\AppData\Local\VirtualStore\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\Debugger\Visualizers?

Если да, то это связано с UAC Virtualization.

0

Я считаю, что это можно отключить в «Инструменты»> «Параметры»: Если вы не видите эффекты DebuggerDisplay или DebuggerTypeProxy, убедитесь, что «Инструменты»> «Параметры»> «Отладка»> «Общие»> «Показывать необработанную структуру объектов в переменных windows» не отмечены.

0

Правильная папка для ее размещения: C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ Common7 \ Packages \ Debugger \ Visualizers. Когда вы разместите эту DLL и перезапустите визуальную студию, вы должны получить «увеличительное стекло» над переменными типа «Выражение» (в режиме отладки вы получите его в окне просмотра, а также при перемещении курсора мыши над переменной)

1

Этот вопрос более 5 лет, так что я предполагаю, что это уже не актуально для оригинального плаката, но для кого-то еще пытается сделать что-то подобное:

System.Diagnostics.DebuggerVisualizer не работает, когда цель является интерфейсом , Вы должны указать конкретный тип. Вы должны указать атрибут на каждом конкретном конкретном типе, который хотите визуализировать:

[System.Diagnostics.DebuggerVisualizer("Financials.Debugging.CellTableVisualizer, Financials.Debugging, Version=1.0.0.0, Culture=neutral, PublicKeyToken=...")] 
[Serializable] 
public class FinCellTable<S> : IFinCellTable, IEnumerable<List<FinCell.IFinCell>> 
    where S : class, FinCell.IFinHeaderCell, FinCell.IFinCell, new() 
{ 
Смежные вопросы