C# での言語インジェクション
文字列リテラルに正規表現や HTML などの他の形式言語が含まれている場合、JetBrains Rider は、 コードインスペクション、 クイックフィックス、 コード補完、 コンテキストアクション 、およびこの抜粋内でその言語に固有の他の多くの機能を提供できます。
JetBrains Rider は、C# 文字列リテラル内で次の言語をサポートしています:
JavaScript
HTML
CSS
JSON
XML
SQL
SqlCommand() コンストラクター内の SQL など、別の言語ファイルの言語の抜粋を明確に検出できる場合があります。 このような場合、JetBrains Rider は埋め込み言語を自動的に検出します。 必要に応じて、JetBrains Rider 設定 Ctrl+Alt+S の ページで、特定の場合に自動言語インジェクションを構成できます。
文字列リテラル内の形式言語を自動的に検出できない場合、JetBrains Rider では、次のいずれかの方法で、そのリテラルを特定の言語を含むものとして手動でマークできます:
コンテキストアクションを使用する
キャレットが埋め込み言語ブロック内にある場合は、 Alt+Enter を押してコンテキストアクションを使用できます。
このアクションは、JetBrains Rider に文字列に対応するシンボル範囲をマークし、その範囲を内部データベースに保存して、含まれるファイルが変更された場合にトラックするよう指示します。 この方法は非常に迅速かつ簡単ですが、欠点が 2 つあります。範囲は VCS マージなどの外部ファイル変更後に失われる可能性があり、この方法でマークされたインジェクションはローカルでのみトラックされます:

[StringSyntaxAttribute] を使用する
.NET 7 以降を対象とするプロジェクトでは、 [StringSyntaxAttribute] を使用して、文字列を含むメソッドパラメーター、プロパティ、フィールドをマークできます。 JetBrains Rider は、属性コンストラクターに従って、対応する文字列リテラル内でコーディング支援機能を有効化します。
例: StringSyntaxAttribute.Regex を使用する場合、対応するリテラルで 正規表現支援機能を利用できます。
![JetBrains Rider: [StringSyntaxAttribute] のコーディング支援 JetBrains Rider: [StringSyntaxAttribute] のコーディング支援](https://resources.jetbrains.com/help/img/rider/2026.1/StringSyntaxAttribute_example.png)
[RegexPatternAttribute] を使用する
JetBrains.Annotations の [RegexPatternAttribute] を使用して、正規表現を受け入れるメソッドのパラメーター、プロパティ、フィールドにマークを付けることができます。 これは、正規表現に推奨される方法です。
[LanguageInjectionAttribute] を使用する
JetBrains.Annotations の [LanguageInjectionAttribute] を使用して、別の言語の文字列を含むメソッドパラメーター、プロパティ、フィールドにマークを付けることができます。
[LanguageInjectionAttribute] は、C# コードを解析する他のすべての JetBrains 製品 (たとえば、 JetBrains ReSharper JetBrains Fleet および InspectCode コマンドラインツール) によって認識されます。
![JetBrains Rider: インジェクションされた言語を [LanguageInjectionAttribute] でマークする JetBrains Rider: インジェクションされた言語を [LanguageInjectionAttribute] でマークする](https://resources.jetbrains.com/help/img/rider/2026.1/language_injection_attribute.png)
不完全なコードブロックの属性で Prefix および Suffix パラメーターを使用することもできます。 例: 文字列に CSS プロパティのリストのみが含まれている場合は、次のパラメーターを使用して、文字列を有効な CSS ステートメントとして処理できます。
コメントを使用する
文字列リテラルの前にコメント /*language=javascript|html|regexp|jsregexp|json|css|xml*/ を追加できます。 この方法は [LanguageInjectionAttribute] を使う場合と似ていますが、変数には対応していて、メソッドパラメーターには対応しておらず、C# 以外でも使えます。 コメントや属性の入力には多少の手間がかかり、コードを汚染していると感じることもあるかもしれませんが、これらはコードを読むすべての人にインテンションを明確にし、失われることはなく、JetBrains Rider でコードを開く誰もがマークされた文字列で同じ機能を利用できます。
インジェクションコメントの形式は、 JetBrains ReSharper および IntelliJ プラットフォームベースの IDE(英語) と互換性があります。

不完全なコードブロックのコメント内で prefix= および postfix= パラメーターを使用することもできます。 例えば、文字列が CSS プロパティのリストだけの場合、その前に次のコメント //language=css prefix=body{ postfix=} を追加できます。 これにより、JetBrains Rider が文字列を有効な CSS として解釈します。