Ho scritto il mio proprio Visualizzatore di debugger.Visual Studio non sta caricando il mio visualizzatore debugger
Esso e gli attributi sono nel proprio assieme. Non ci sono riferimenti o attributi nell'assembly che contiene la classe da debugare - Voglio fare una drop-in dll che è facoltativa per le persone da usare.
La classe che sto cercando di eseguire il debug è un generico.
[Serializable]
public class FinCellTable<S> : IFinCellTable, IEnumerable<List<FinCell.IFinCell>>
where S : class, FinCell.IFinHeaderCell, FinCell.IFinCell, new()
Ecco il visualizzatore:
[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);
}
}
}
}
Sono in esecuzione Visual Studio 2010, e la seguente directory contiene la DLL e PDB dell'Assemblea Visualizer:
C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\Debugger\Visualizers
I posizionare un punto di interruzione su un'istanza di IFinCellTable che è specificatamente FinCellTable. Non mostra la lente d'ingrandimento.
Ho eseguito il debug di Visual Studio utilizzando un altro Visual Studio poiché il primo VS stava eseguendo il debug. Ho visto la finestra di output come la prima DLL di VS caricata. Quando ho attivato un visualizzatore su un datatable, il secondo VS ha emesso il messaggio che caricava Microsoft.VisualStudio.DebuggerVisualizers.dll e Microsoft.VisualStudio.Debugger.DataSetVisualizer.dll (quest'ultimo dalla directory corretta che ho detto sopra). (La finestra Modules si comporta/mostra lo stesso.)
Quindi, ovviamente, l'assembly Drop-In di Visualizzatore Debugger non viene caricato da VS, quindi non è in grado di visualizzare la lente d'ingrandimento.
Come si ottiene Visual Studio per caricare Visualizer in anticipo, quindi i visualizzatori drop-in funzionano e non è necessario modificare il codice originale?
Niente salta fuori. Hai * fatto * riavvia VS dopo aver copiato il visualizzatore, giusto? –
Hai bisogno di fare una sorta di interfaccia utente o di ricarica dell'ambiente?Questo era necessario per i componenti aggiuntivi nelle versioni precedenti. –
Strano. Ho fatto esattamente ciò che descrivi qui: http://www.adamjamesnaylor.com/HowToWriteADebugVisualiserInVisualStudio.aspx e sembrava funzionare bene. Come chiede Michel, sei sicuro che sia nella cartella corretta? Chiedo perché al lavoro la mia cartella utente di Visual Studio è su una condivisione di rete e VS genera eccezioni di sicurezza quando si tenta di accedere alla condivisione. –