24

String.Format が引数を使用して、書式設定する文字列に変数を挿入する方法が気に入っています。これはコンポジット フォーマットと呼ばれ、MSDN のこちらで説明されています。

ロギング ファサードでこの機能が必要です。

string foo = "fancy";
string bar = "message";
log.Debug("My {0} log {1}.", foo, bar)

私の ILoggerFacade には、次のメソッド シグネチャがあります。

void Debug<T>(T message, params Object[] args);

そして、私はこれを非常に簡単に実装できることを知っています:

ILog m_Log = \\some logging implementation
public void Debug<T>(T message, params Object[] args)
{
    m_Log.Debug(String.Format(message, args));
}

ただし、Visual Studio では、{0}、{1}、... 引数の派手な強調表示が得られません。

Composite Formatting メソッドの引数の強調表示

それらの責任を負うのはReSharperだと思いますが、フォーマットの引数を無視して「インテリセンス」の助けを与えていないようです。ファサードを使用する他の開発者がこれを期待しているため、これは良くありません。

これらの動作と同様に、カスタム形式のメソッドの引数の強調表示と "intellisense" を取得するにはどうすればよいですか。

Console.WriteLine(...)
String.Format(...)
etc...

どんな助けでも大歓迎です。

4

1 に答える 1

30

ReSharpers外部注釈を確認してください。具体的には、これにはStringFormatMethodAttributeを使用します。

外部注釈を使用するには、実際には 3 つの方法があります。2つは綴られており、1つは行間を読んで確認する必要があります.

  1. 「JetBrains.Annotations.dll」を参照してください。私はこれに対してお勧めします。DLL をコピーしたり、ReSharper のインストール ディレクトリを参照しなければならないという考えは好きではありません。これにより、アップグレードまたは再インストールすると問題が発生する可能性があります。

  2. 属性宣言をコピーしてソリューションに貼り付けます。よりコントロールしやすくなるため、これをお勧めします。さらに、ReSharper を取り除くこともできます (なぜ誰もがこれを行うのでしょうか? 見知らぬことが起こったのではないかと思います)。それでも、ライブラリを消費する人にこの機能を提供できます。これを行う方法については、最初のリンクに段階的な説明があります。

  3. .NET アセンブリで使用するものと同様の XML ファイルを作成します。これは、Silverlight 単体テスト フレームワークに対して行いました。ReSharper は、デフォルトではこれらのテストを認識しません。

    これをする

    1. ファイル名<assembly>.xmlを作成し、「ReSharper\vXX\Bin\ExternalAnnotations」に入れます。
    2. ルート要素を追加する"<assembly name="<assembly>">
    3. 次に、属性を付与する各メンバーの要素を追加<member>します。

    独自のコードでこれを行うことはお勧めしません。ただし、この機能を持ちたいが編集できないアセンブリがある場合は、これがその方法です。これは自分のマシンにのみ適用され、アセンブリを使用する各開発者は xml ファイルをコピーする必要があります。

于 2012-08-23T13:07:11.133 に答える