繁体   English   中英

Visual Studio未加载我的调试器可视化工具

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM