外部アノテーション
使い方
ソースが利用できない外部ライブラリを使用している場合、コードアノテーションを指定するための属性をそこで使用することは現実的ではないようです。
この場合、外部アノテーションを使用すると、すでにコンパイルされたエンティティを、JetBrains Rider のコード分析エンジンによって認識される属性で補完できます。外部アノテーションを使用すると、ライブラリのコンパイル時に宣言されていなかった属性 (メソッド、パラメーター、その他の宣言) をエンジンに参照させることで、エンジンを「騙す」ことができます。
外部アノテーションは XML ファイルで指定されています。ソリューションをロードするとき、JetBrains Rider は特定の場所にある特定の名前の XML ファイルを探し、そこからアノテーションを読み取ります。これらの XML ファイルは XmlDoc に似た構造をしています。例: .NET フレームワーク 4.0 のアセンブリ System.Xml
からのメソッド XmlReader.Create(Stream input)
に NotNull
契約を付けてアノテーションを付けると、XML ファイルは次のようになります。
JetBrains 外部アノテーション
.NET フレームワーククラスライブラリ、およびその他の頻繁に使用されるライブラリでは、上記の方法で膨大な量のシンボルにアノテーションを付けました。これらのライブラリ用の外部アノテーションは JetBrains Rider と共にインストールされ、より良いコード分析を保証します。一部の機能(たとえば、ASP.NET MVC 5.2 のサポート)も外部アノテーションに依存しています。
JetBrains 外部アノテーションのソースコードは、GitHub:https://github.com/JetBrains/ExternalAnnotations(英語) の MIT ライセンスで入手できます。このリポジトリに貢献したり、外部のアノテーションの例として使用することは大歓迎です。
外部アノテーションを作成する
コンパイル済みアセンブリの契約を指定するための外部アノテーションを作成できます。JetBrains Rider が外部アノテーション付きの XML ファイルを確実に認識するようにするには、このファイルの名前を [Assembly.Name].ExternalAnnotations.xml にする必要があります。アノテーション付きバイナリの使用方法に応じて、次の場所にアノテーションファイルを作成できます。
バイナリを(NuGet などで)公開する場合は、アノテーション付き [Assembly.Name].dll ファイルと同じフォルダーにアノテーション [Assembly.Name].ExternalAnnotations.xml ファイルを配置します。
プロジェクトに含まれる一部のバイナリにアノテーションを付ける場合は、プロジェクトまたはソリューションファイルの隣の ExternalAnnotations フォルダーに各アセンブリのアノテーションファイルを配置します。
このフォルダーにアノテーションファイルを配置するとき、ファイルはアセンブリ名、つまり [Assembly.Name].xml に基づいて名前を付ける必要があります。ExternalAnnotations のサブフォルダーに存在することもできますが、そのフォルダーにはアセンブリ名、つまり ExternalAnnotations/[Assembly.Name]/[AnyName].xml が必要です。
このようにして、VCS の下にアノテーションを保持して、チームがそれらから利益を得られるようにすることもできます。
外部アノテーションの作成を説明するために、MyTestClass
クラスを持つ TestLib アセンブリと static string ReverseString(String inputString)
メソッドを使用するとします。アセンブリのドキュメントから、メソッドが純粋で null を返さないこと、そのパラメーターが null になることはないことを知っているとします。
当初、JetBrains Rider は ReverseString
がどのように機能するのかを認識していないため、次のコードで問題は見つかりません。
![外部アノテーション External annotations](https://resources.jetbrains.com/help/img/rider/2024.1/external_annotations_0.png)
コンパイルされたアセンブリの外部アノテーションを作成する
ファイルシステムで TestLib.dll を見つけて、TestLib.dll が参照されているプロジェクトまたはソリューションファイルの横にある同じフォルダーまたは ExternalAnnotations フォルダーに TestLib.ExternalAnnotations.xml という名前のファイルを作成します。
編集のために TestLib.ExternalAnnotations.xml を開き、以下を入力してください:
<assembly name="TestLib"> <member name="M:TestLib.MyTestClass.ReverseString(System.String)"> <attribute ctor="M:JetBrains.Annotations.NotNullAttribute.#ctor" /> <attribute ctor="M:JetBrains.Annotations.PureAttribute.#ctor" /> <parameter name="inputString"> <attribute ctor="M:JetBrains.Annotations.NotNullAttribute.#ctor" /> </parameter> </member> </assembly>ソリューションを再ロードします。現在、JetBrains Rider は
ReverseString
の不適切な使用を検出し、null パラメーターの問題を強調しています。... 戻り値の不要なチェック:
ライブラリシンボルに適用される外部アノテーションを表示するには、クイックドキュメント機能を使用します。シンボル上で Ctrl+Q を押すだけでその属性を調べることができます。我々のケースでは、
ReverseString
に[NotNull]
および[Pure]
属性がアノテーションされ、パラメーターに[NotNull]
がアノテーションされていることがわかります。
外部アノテーションを配布する
外部アノテーションを使用するもう 1 つのケースは、配布するライブラリまたは任意のライブラリに対して外部アノテーションを公開することです。この場合、ReSharper、Rider、Fleet も使用しているライブラリのユーザーは、より多くの提案と修正を受け取ることになります。
ライブラリの外部アノテーションは、NuGet パッケージとして公開し、そこからインストールできます。外部アノテーションのパッケージ化の詳細については、ReSharper プラグイン開発ガイドを参照してください。
関連ページ:
![](https://pleiades.io/icons/rider.png)
バージョン管理
.NET 開発環境 Rider の使い方や高等テクニック満載の JetBrains 日本語公式ヘルプ。最新の英語版ヘルプ内容が随時反映されます。
![](https://resources.jetbrains.com/help/img/rider/2024.1/Coding_Assistance__Quick_Documentation.png)
クイックドキュメント
JetBrains Rider を使用すると、エディター内でシンボルのドキュメントをすばやく確認できます。シンボルがサポートされている形式 (C# の XML-docs など) でドキュメント化されている場合、すべてのドキュメントが適切な形式で表示されます。それ以外の場合は、基本的なシンボル情報が表示されます (完全なメソッドシグネチャーまたは型の可視性と名前空間など)。デフォルトでは、シンボルの上にマウスを置くと、クイックドキュメントポップアップが表示されます。これを無効にして常にポップアップ...
![](https://resources.jetbrains.com/help/img/rider/2024.1/annotations_nuget.png)
ソースコードのアノテーション
JetBrains Rider のコードアノテーションの恩恵を受ける最も簡単な方法は、ソースコードのシンボルにアノテーション属性を追加して、JetBrains Rider があなたのソリューションをより正確かつ正確に分析できるようにすることです。デフォルトでは、すべてのアノテーション属性クラスは属性でマークされているため、コンパイラーはコード内の属性の使用を無視します。つまり、'JetBrains.Annotations.dll' アセンブリへのバイナリ参照は生成されません。ただし、プロジェクト...
![](https://resources.jetbrains.com/help/img/rider/2024.1/contract_annotations.png)
契約アノテーション
契約アノテーションでは、与えられた入力に対する期待される出力を定義することができます。言い換えれば、関数の参照型とブール型引数とその戻り値の間の依存関係を定義することができます。契約アノテーションのメカニズムにより、より簡単で安全な方法で消費できる API を作成できます。を使って関数を装飾することによって契約アノテーションを実装することができます。あなたのソースコード、JetBrains.Annotations 名前空間を参照するでそれをやりたいなら。外部アノテーションを使用して既存のバイナリ...