私は独自の Debugger Visualizer を作成しました。
それと属性は、独自のアセンブリにあります。デバッグ対象のクラスを含むアセンブリに参照または属性がありません。ユーザーが使用できるオプションのドロップイン 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
具体的には FinCellTable である IFinCellTable のインスタンスにブレークポイントを配置します。虫眼鏡は表示されません。
最初のVSがデバッグしていたので、別のVisual Studioを使用してVisual Studioをデバッグしました。最初の VS ロードされた dll として出力ウィンドウを見ました。データテーブルでビジュアライザーをトリガーすると、2 番目の VS は、Microsoft.VisualStudio.DebuggerVisualizers.dll と Microsoft.VisualStudio.Debugger.DataSetVisualizer.dll (後者は上記の正しいディレクトリからのもの) をロードしたことを出力しました。(モジュールウィンドウは同じように動作/表示します。)
したがって、明らかに私のDebugger Visualizer Drop-InアセンブリはVSによってロードされないため、虫眼鏡を表示することはわかりません。
Visual Studio にビジュアライザーを事前にロードさせて、ドロップイン ビジュアライザーが機能し、元のコードを編集する必要がないようにするにはどうすればよいでしょうか?