[英]Visual Studio is not loading my debugger visualizer
我編寫了自己的Debugger Visualizer。
它和屬性都在它們自己的程序集中。 包含要調試的類的程序集中沒有引用或屬性 - 我想創建一個可供人們使用的drop-in 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
我在一個特定於FinCellTable的IFinCellTable實例上放置一個斷點。 它沒有顯示放大鏡。
我使用另一個Visual Studio調試Visual Studio,因為第一個VS正在調試。 我看到輸出窗口是第一個VS加載的dll。 當我在數據表上觸發可視化工具時,第二個VS輸出它加載了Microsoft.VisualStudio.DebuggerVisualizers.dll和Microsoft.VisualStudio.Debugger.DataSetVisualizer.dll(后者來自我上面說的正確目錄)。 (“模塊”窗口的行為/顯示相同。)
所以很明顯我的Debugger Visualizer Drop-In程序集不會被VS加載,所以它不知道顯示放大鏡。
你如何讓Visual Studio來加載展示台的前期,所以插入式展示台的工作 ,你不需要編輯您的原代碼?
猜測:你確定正確的文件是在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虛擬化 。
這個問題已經超過5年了,所以我認為它與原始海報不再相關,但對於其他試圖做類似事情的人來說:
當target是接口時,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()
{
放置它的正確文件夾是:C:\\ Program Files(x86)\\ Microsoft Visual Studio 12.0 \\ Common7 \\ Packages \\ Debugger \\ Visualizers。 一旦你把這個DLL放在那里並重新啟動visual studio,那么你應該在“Expression”類型的變量上得到一個“放大鏡”(在調試模式下,你將在觀察窗口中獲得它,當你將鼠標光標移動到變量上時)
我相信可以在工具>選項中禁用它:如果沒有看到DebuggerDisplay或DebuggerTypeProxy的效果,請確保未選中工具>選項>調試>常規>顯示變量窗口中對象的原始結構。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.