2013-03-28 11 views
7

Resharper構文で強調表示するように、私のメソッドの1つをStringFormatMethod属性でフラグを立てたいとします。Resharperコードアノテーションを非侵襲的に独自のコードに追加する

JerBrains.Annotationsアセンブリを参照して属性を追加することで、これを実行できました。

しかし、これはこれを行うには非常に侵略的な方法であることがわかります。誰もがここでJetBrainsを使用するわけではなく、.dllをSubversionにコミットし、依存関係を追加し、特定のIDE固有のものをコードに埋め込む必要があります。

「外部注釈」機能については読んだが、できなかった。私はそれが間違っていたかどうか、あるいは単にソリューション内のプロジェクトでサポートされていないかどうかはわかりません(コンパイルされたアセンブリ参照ではありません)。

非侵襲的な方法でプロジェクト内のメソッドにコードアノテーションを追加する方法はありますか?

P.Sこの方法であって、システムを使用して

namespace MyLib 
{ 
    public static class Assert 
    { 
     public static void That(bool condition, string format, params object[] @params) 
     { 
      if (!condition) 
       throw new Exception(string.Format(format, @params)); 
     } 
    } 
} 

そして、これが

Cの内容です:\プログラムファイル(x86の)\ジェットブレーンズ\ ReSharperのの\ V7.1 \ビン\ ExternalAnnotations \ MyLib.xml:

<assembley name="MyLib"> 
    <member name="MyLib.Assert.That(System.Boolean,System.String,System.Object[])"> 
     <attribute ctor="M:JetBrains.Annotations.StringFormatMethodAttribute.#ctor"> 
      <argument>format</argument> 
     </attribute> 
    </member> 
</assembley> 

答えて

8

ます注釈属性を追加するためにアセンブリを参照する必要はありません。 As per the documentationの場合は、ReSharper/Options/Code Annotationsに移動し、属性の実装をクリップボードにコピーして、ReSharperが使用するソースに貼り付けることができます。アセンブリ内にJetBrainsがないようにするには、名前空間を変更することもできます。

ソースコードに外部(XML)アノテーションを使用して運があるかどうかわかりませんが、私は彼らが既存のバイナリのためだけのものだという印象を受けます。つまり、あなたのソースを属性で飾ることは、あなた自身や他の開発者のためのドキュメンテーションのソースとして非常に価値があると思います。

+0

と一緒に行きましたが、私はそれが同様に侵襲的であることがわかりました。実際、私はそれが.dllを削除するよりも悪いと思う - 今私たちは、プロジェクトにコピー・ペースト(ugh)というコードをたくさん持っている。 次は、40kの.dllをSubversionにドロップする方が好きです。 –

+1

@AmirAbiri私が最初にそれについて読んだとき、私はその考えに夢中ではなかった。しかし、私は間違いなく、効果的に設計時のアセンブリに依存することを好む。 – shambulator

5

役立つかどうかわかりませんが、要素名<assembley>のスペルが間違っています(実際にスキーマで使用されていない限り)。 <assembly>である必要があります。

9

だけで総括する可能性が:

  • あなたはnuget Jetbrains.Annotationsを参照し、JETBRAINS_ANNOTATIONSを定義していない: このような注釈が唯一のソースコードを扱う開発者のために有用であり、彼らはあなたのバイナリにコンパイルされません(条件文が使用されます)、dllを参照するときには表示されません。さらにdevelopmentOnly="true"属性をpackages.configのJetbrains.Annotationsに追加することもできます。したがって、デフォルトでは依存関係として扱われません。

  • あなたは、上記のように参照するが、JETBRAINS_ANNOTATIONSを定義します。 は今、あなたは本当のバイナリ依存関係を持っているとJetbrains.Annotations.dllは、ライブラリと一緒に配布されなければならないのいずれか、またはそれがnuget依存関係としてダウンロードする必要があります。彼らは唯一のバイナリバージョンを使用する場合でも、彼らはその後、他の開発者のためのあなたのlibに埋め込まれており、利用可能:

  • あなたはinternalとの注釈が(そのクライアントコードがそれらを使用することはありません)、「YourLib.Annotations」にチェックをコピーします。

  • あなたは、外部のアノテーションを提供します。大きなライブラリのを/より多くの属性が、これはまた、40Kを消費することができ、それは別のファイルで、一般的には消費/作成するあまり簡単です。

は、私は個人的に、私はコピー&ペーストのオプションについて読ん番目のオプション(共有ライブラリのために、プロジェクトは通常、ちょうどnugetsを使用)

+0

'developmentOnly'は素晴らしいアイデアです。 – shambulator

+0

それは依存しています:)私は最近、マルチプロジェクトレポを分割し、共有ライブラリを外部のナゲットに移動しました。 'developmentOnly'は' Jetbrains.Annotations'の依存関係なしでナゲットを公開することを許可しましたが、アノテーションをたくさん使うと、クライアントコードからそれらを見逃してしまいます。 – kwesolowski

関連する問題