我编写了自己的调试器可视化工具。
它和属性都在它们自己的程序集中。包含要调试的类的程序集中没有引用或属性 - 我想制作一个可供人们使用的可选的插入式 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,以下目录包含 Visualizer 程序集的 .dll 和 .pdb:
C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\Debugger\Visualizers
我在 IFinCellTable 的一个实例上放置了一个断点,该实例特别是 FinCellTable。它没有显示放大镜。
我使用另一个 Visual Studio 调试了 Visual Studio,因为第一个 VS 正在调试。我看着输出窗口作为第一个 VS 加载的 dll。当我在数据表上触发可视化工具时,第二个 VS 输出它加载了 Microsoft.VisualStudio.DebuggerVisualizers.dll 和 Microsoft.VisualStudio.Debugger.DataSetVisualizer.dll(后者来自我上面所说的正确目录)。(“模块”窗口的行为/显示相同。)
所以很明显我的Debugger Visualizer Drop-In程序集没有被VS加载,所以它不知道显示放大镜。
您如何让 Visual Studio 预先加载 Visualizer,以便插入式可视化器工作并且您无需编辑原始代码?