非推奨の API を報告および更新する
API を進化させるときは、遅かれ早かれ重大な変更を導入する必要があります。 これに対処する従来の方法は、非推奨のタイプとメンバーを [Obsolete] 属性でマークし、属性のメッセージを使用して新しい API に移行する方法を説明することです。
JetBrains Rider は、API ユーザーが旧 API を見つけて自動的に新しいものへ変換できる、より洗練されたソリューションを提供します。 API の作成者は、非推奨の型やメンバーに [CodeTemplate] 属性を JetBrains.Annotations から付与し、旧 API に一致する検索パターンとその置換パターンを指定する必要があります。 この属性は、対応する コードインスペクション、 クイックフィックス および スコープの修正 とともに、カスタムインスペクションとして機能します。
[CodeTemplateAttribute] は、C# コードを解析する他のすべての JetBrains 製品 (たとえば、 JetBrains ReSharper JetBrains Fleet および InspectCode コマンドラインツール) によって認識されます。
例を使用して、それがどのように機能するかを見てみましょう。
public class MyAssert
{
// Deprecated API. Usages look like:
// MyAssert.IsTrue(args.Length > 0);
public static void IsTrue(bool condition)
{
if (!condition)
throw new Exception("Assertion failed");
}
// New API. Usages should look like:
// MyAssert.That(args.Length > 0, Is.True);
public static void That<T>(T value, Constraint<T> constraint)
{
// ...
}
}
public class Constraint<T> { }
class Is
{
public static Constraint<bool> True => null;
public static Constraint<bool> False => null;
}
非推奨の IsTrue() メソッドに [CodeTemplate] 属性でアノテーションを付けましょう。
[CodeTemplate(
searchTemplate: "$member$($expr$)",
Message = "The API is deprecated, use 'MyAssert.That' instead",
ReplaceTemplate = "MyAssert.That($expr$, Is.True)",
ReplaceMessage = "Convert to 'MyAssert.That'")]
public static void IsTrue(bool condition)
{
if (!condition)
throw new Exception("Assertion failed");
}
これで JetBrains Rider は MyAssert.IsTrue() のすべての使用箇所を報告し、移行用の修正提案を行います:
![JetBrains Rider: [CodeTemplate] 属性を使用して、非推奨の API の移行修正を提案する JetBrains Rider: [CodeTemplate] 属性を使用して、非推奨の API の移行修正を提案する](https://resources.jetbrains.com/help/img/rider/2026.1/CodeTemplateAttribute_example.png)
MyAssert.IsTrue(args.Length > 0);
MyAssert.That(args.Length > 0, Is.True);
2026 年 6 月 12 日