言語インジェクション
文字列リテラル(または XML 風言語のタグや属性)が正規表現や HTML などの他の形式言語を含んでいる場合、ReSharper は コードインスペクション、 クイックフィックス、 コード補完、 コンテキストアクション など、その言語固有の多くの機能をこの抜粋内で提供できます。
ReSharper は、C#、JavaScript、TypeScript の文字列リテラル内で次の言語をサポートしています:
JavaScript
HTML
CSS
JSON
XML
ReSharper 2022.2 以降、JavaScript、TypeScript、JSON、CSS、Protobuf の生産性向上機能の積極的な開発は中断されており、これらの機能はデフォルトで無効になっています。 これらを有効化するには、ReSharper オプション の ページ Alt+R、O で、対応するチェックボックス JavaScript と TypeScript、 CSS 言語、 Protobuf を選択してください。
他の言語ファイルの中にある言語の抜粋が明確に検出できる場合があります。例えば、 <script></script> タグ内の JavaScript や、HTML の style 属性内の CSS などです。 これらの場合、ReSharper は埋め込み言語を自動で検出します。 必要に応じて、 ページの ReSharper オプション
Alt+R、O
で自動言語インジェクションを特定のケースに構成できます。
文字列リテラル内の形式言語が自動検出できない場合、ReSharper により、次のいずれかの方法で、そのリテラルに特定の言語が含まれていることを手動でマークできます:
コンテキストアクションを使用する
キャレットが埋め込み言語ブロック内にある場合は、 Alt+Enter を押してコンテキストアクションを使用できます。
このアクションは、ReSharper に文字列に対応するシンボル範囲をマークし、この範囲を内部データベースに保存し、格納ファイルの変更に合わせてトラックするよう指示します。 この方法は非常に迅速かつ簡単ですが、VCS マージなどの外部ファイルの変更後に範囲が失われる可能性があり、この方法でマークされたインジェクションはローカルでのみトラックされます:

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

不完全なコードブロックのコメントで prefix= および postfix= パラメーターを使用することもできます。 例えば、文字列に CSS プロパティのリストだけが含まれている場合は、その前に次のコメント //language=css prefix=body{ postfix=} を追加できます。 これにより、ReSharper はその文字列を有効な CSS として解釈します。
この機能は、次の言語とテクノロジーで サポートされています。
ここで説明する手順と例では、C# の機能の使用について説明します。 他の言語の詳細については、 言語およびフレームワーク セクションの対応するトピックを参照してください。