50

私は Visual Studio のデバッガー ビジュアライザーにしばらく取り組んできましたが、実際のビジュアライザーは正常に動作しています。問題は、変数を調べるときに常にビジュアライザーリストの一番上に配置されることです。これは、テキストを一番上のものとして使用している一部のユーザーを本当に悩ませます (VS を開いたときに一番上のものもデフォルトであるため)。

ここに画像の説明を入力

私が最初に考えたDialogDebuggerVisualizerまたはDebuggerVisualizerAttributeでこれに対するサポートが見つからないので、ビジュアライザーの並べ替え順序に影響を与える方法について SO/MSDN/Google を精査してきました (できればリストの最後に入れます) )しかし、役に立たない。

以下は、ビジュアライザーを登録する方法です。視覚化されている値に基づいてフォームを表示するだけです。

using Microsoft.VisualStudio.DebuggerVisualizers;

[assembly: System.Diagnostics.DebuggerVisualizer(
    typeof(Shorthand.VSAddins.JsonVisualizer.JsonVisualizer),
    typeof(VisualizerObjectSource),
    Target = typeof(string),
    Description = "Json Visualizer")]
namespace Shorthand.VSAddins.JsonVisualizer
{
    public class JsonVisualizer : DialogDebuggerVisualizer
    {
        protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
        {
            var json = objectProvider.GetObject() as string;

            var form = new VisualizerForm { Json = json };
            windowService.ShowDialog(form);
        }
    }
}

ビジュアライザーの順序に影響を与えることが可能かどうか、またはそのままにする必要があるかどうかは誰にもわかりませんか?

4

3 に答える 3

2

解決策はないと思います。ただし、回避策があります。

DebuggerVisualizer独自のテキスト ビジュアライザーを定義し、適切な属性を の属性の前に置きますJsonVisualizer。その結果、文字列はデフォルトで読み取り可能になり、Json Visualizer を選択できるようになります。複数行のテキストボックスを含むウィンドウは、それほど面倒ではありません。

おそらく、ビジュアライザーを作成する必要さえありません。内部のものを使用できるはずですが、その名前がわかりません(「テキストビジュアライザー」に使用されるクラスはどれですか?)。

于 2013-09-18T17:22:14.573 に答える
0

VSの「内部」は文字列のタイプとxmlのタイプを非常に簡単に区別できると思いますが、Xmlも単なる文字列であるため、ここでの重要な質問は、VSが2つの違いをどのように伝えるかということです.

VS XML ビジュアライザーを分析して、それがどのように機能するかを確認できますか (DLL でリフレクターを使用して実行する必要がある場合でも、それを解決する方法を確認できる場合があります)。

于 2013-09-14T23:28:10.737 に答える
0

設計上、常に最初に表示されます。ボンネットの下のキャストは、それが反映している変数に最適な一致を見つけました。

ただし、次の 2 つのいずれかを行うことができます。文字列に「:」が含まれている場合にのみビジュアライザーを表示するか、リフレクションを使用して、必要な順序でコレクションの最後にビジュアライザーを追加し、コレクションからオリジナルを削除して、ビジュアライザーを並べ替えることができます。後者の場合、コレクションを読み取り専用から書き込み可能に変更する必要があります。リフレクション経由。

成功したいというあなたの意志以外に頼れる信頼できる情報源はありません。

于 2013-09-14T00:14:27.500 に答える