2

これが設計によるものなのか、VS 2013 Ultimate の機能を有効/無効にする必要があるのか​​ はわかりませんが、コードレンズによって生成される参照カウントは完全に狂っています。特定のクラス/メソッドを直接参照するクラス/メソッドの数を表示する代わりに、ソリューション全体でクラス/メソッドと同じ名前を持つすべての数を表示します。

たとえば、ソリューションに 4 つのクラスがあるとします (それぞれに 1 つのクラスを持つ 4 つのプロジェクトは関係ありません)。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ClassLibrary20
{

    public interface IWillPrint
    {
        void PrintThis();
    }


    public class Class1 : IWillPrint
    {
        public void PrintThis() { }
    }

    public class Class2 : IWillPrint
    {
        public void PrintThis() { }
    }

    public class Class3 : IWillPrint
    {
        public void PrintThis() { }
    }

    public class Class4 : IWillPrint
    {
        public void PrintThis() { }
    }

    public class Class5
    {

        public void SomeMethod()
        {
            var j = new Class1();
            j.PrintThis();
        }
    }
}

class1 のメソッド PrintThis() の参照カウントは 5 を示しています。参照ポップアップ ウィンドウには、class1、class2、class3、class4、および class5 と、それらに対応する行番号が表示されます。

ここに画像の説明を入力

ポップアップには 1 つの参照 (1 つの参照) とクラス 5 のみが表示されます。また、コードレンズにメソッドを実際に実装するクラスもカウントに含まれている理由がわかりません。誰が誰を呼んでいるのかわからなくなりました。処理するクラスが多数ある場合、参照カウントは大きな助けになります。

もっと簡単な解決策があれば、リシャーパーや VS を再インストールするのは嫌です。

4

2 に答える 2

2

私は、この機能が開発中であった過去に、このトピックに関するかなりの議論を見てきました。理由を確認するために、メール アーカイブを少し掘り下げる必要がありました。公式の説明は次のとおりです。

以下に説明する内容は、別の観点から見るとバグのように見えるかもしれませんが、間違いなく設計どおりに機能しています。基本的に、Find All References は、いくつかの理由で、関連するシンボル (仮想メソッド、オーバーライド、インターフェイスの実装など) をカスケードします。

  1. すべての参照を検索は、本質的にシンボルの名前変更に関連付けられています。したがって、これは、プログラムを壊したくない場合にシンボルの名前変更操作に含める必要があるシンボルのセットです。
  2. プログラム全体の分析を実行しないと、Visual Studio は、プログラムの実行時にどのメソッドが実際の参照であるかを正確に知ることができません。(とにかく、それは実際には不可能です.

IoC/DI フレームワークを使用する人がますます増えているため、実行時に置換される可能性がますます高くなり、実行時に代わりに置換される可能性のある他のメソッドを見つけることに個人的に大きな価値があると感じていますが、それらが置換される場合は素晴らしいことです。どのメソッドが直接参照され、どのメソッドが代用可能な参照であるかを明確に示すために、別々にグループ化されています。

「参照」は間違った名前かもしれませんが、「関連するシンボル」も多くの質問につながると思います;)。

CodeLens でこの動作を変更する方法がわからないので、とにかく Resharper をインストールする必要があるかもしれません。Visual Studio User Voiceにこの項目が既にあるかもしれませんが、見つかりませんでした。

于 2015-09-06T15:20:54.130 に答える
0

投稿されたコードに欠陥があります。クラス宣言が無効です。

同じようにして宣言に class キーワードを追加すると、Class1 に 1 つの参照が表示され、Classes 2、3、4 に 0 つの参照が表示されました。

VS-2014 [Update 4] と VS-2015 [RTM] でこれを行いました.....以下のコード:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication3
{
public class class1
{
    public void PrintThis()
    {
    }
}

public class class2
{
    public void PrintThis()
    {
    }
}

public class class3
{
    public void PrintThis()
    {
    }
}

public class class4
{
    public void PrintThis()
    {
    }
}

public class class5
{

    public void SomeMethod()
    {
        var j = new class1();
        j.PrintThis();
    }
}

internal class Program
{
    private static void Main(string[] args)
    {
    }
}
}
于 2015-09-06T12:46:49.723 に答える