ReSharper 2026.1 Help

言語インジェクション

文字列リテラル(または XML 風言語のタグや属性)が正規表現や HTML などの他の形式言語を含んでいる場合、ReSharper は コードインスペクションクイックフィックスコード補完コンテキストアクション など、その言語固有の多くの機能をこの抜粋内で提供できます。

ReSharper は、C#、JavaScript、TypeScript の文字列リテラル内で次の言語をサポートしています:

ReSharper 2022.2 以降、JavaScript、TypeScript、JSON、CSS、Protobuf の生産性向上機能の積極的な開発は中断されており、これらの機能はデフォルトで無効になっています。 これらを有効化するには、ReSharper オプション の 環境 | 製品と機能 ページ Alt+R、O で、対応するチェックボックス JavaScript と TypeScriptCSS 言語Protobuf を選択してください。

他の言語ファイルの中にある言語の抜粋が明確に検出できる場合があります。例えば、 <script></script> タグ内の JavaScript や、HTML の style 属性内の CSS などです。 これらの場合、ReSharper は埋め込み言語を自動で検出します。 必要に応じて、 コード編集 | 言語インジェクション ページの ReSharper オプション Alt+R、O で自動言語インジェクションを特定のケースに構成できます。

文字列リテラル内の形式言語が自動検出できない場合、ReSharper により、次のいずれかの方法で、そのリテラルに特定の言語が含まれていることを手動でマークできます:

コンテキストアクションを使用する

キャレットが埋め込み言語ブロック内にある場合は、 Alt+Enter を押してコンテキストアクションを使用できます。

このアクションは、ReSharper に文字列に対応するシンボル範囲をマークし、この範囲を内部データベースに保存し、格納ファイルの変更に合わせてトラックするよう指示します。 この方法は非常に迅速かつ簡単ですが、VCS マージなどの外部ファイルの変更後に範囲が失われる可能性があり、この方法でマークされたインジェクションはローカルでのみトラックされます:

ReSharper: Analyzing CSS code inside a C# string literal

[StringSyntaxAttribute] を使用する

.NET 7 以降を対象とするプロジェクトでは、 [StringSyntaxAttribute] を使用して、文字列を含むメソッドパラメーター、プロパティ、フィールドをマークできます。 ReSharper は、属性コンストラクターに従って、対応する文字列リテラル内でコーディング支援機能を有効化します。

例: StringSyntaxAttribute.Regex を使用する場合、対応するリテラルで 正規表現支援機能を利用できます。

ReSharper: [StringSyntaxAttribute] のコーディング支援

[RegexPatternAttribute] を使用する

C# では、 JetBrains.Annotations[RegexPatternAttribute] を使用して、正規表現を受け入れるメソッドのパラメーター、プロパティ、フィールドにマークを付けることができます。 これは、正規表現に推奨される方法です。

[LanguageInjectionAttribute] を使用する

C# では、 JetBrains.Annotations[LanguageInjectionAttribute] を使用して、別の言語の文字列を含むメソッドパラメーター、プロパティ、フィールドにマークを付けることができます。

[LanguageInjectionAttribute] は、C# コードを解析する他のすべての JetBrains 製品 (たとえば、 JetBrains Rider JetBrains Fleet および InspectCode コマンドラインツール) によって認識されます。

ReSharper: インジェクションされた言語を [LanguageInjectionAttribute] でマークする

不完全なコードブロックの属性で Prefix および Suffix パラメーターを使用することもできます。 例: 文字列に CSS プロパティのリストのみが含まれている場合は、次のパラメーターを使用して、文字列を有効な CSS ステートメントとして処理できます。

void ProcessCss([LanguageInjection(InjectedLanguage.CSS, Prefix = "body{", Suffix = "}")] string css) { // If 'css' == 'color: white; background-color: brown;' // it will be analyzed as 'body{ color: white; background-color: brown; }' }

コメントを使用する

文字列リテラルの前にコメント /*language=javascript|html|regexp|jsregexp|json|css|xml*/ を配置できます。 この方法は [LanguageInjectionAttribute] の利用に似ていますが、変数には有効で、メソッドのパラメーターには使えません。また、C# 以外にも使用できます。 コメントや属性は多少入力が必要で、コードを汚染しているようにも感じるかもしれませんが、コードを読む人すべてにインテンションを明確に伝えられ、失われることはなく、ReSharper でコードを開いた人もマークされた文字列で同じ機能を利用できます。

インジェクションコメントの形式は、 JetBrains Rider および IntelliJ プラットフォームベースの IDE(英語) と互換性があります。

ReSharper: コメント付きの C# 文字列への言語インジェクション

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

この機能は、次の言語とテクノロジーで サポートされています。

言語: C#

言語: VB.NET

言語: C++

言語: ASP.NET

言語: Razor

言語: XAML

言語: Resx

言語: スクリプトの作成

言語: SQL

この機能は C# で利用可能です

この機能は Visual Basic では使用できません

この機能は C++ では使用できません

この機能は ASP.NET では使用できません

この機能は Razor では使用できません

機能は XAML では使用できません

機能はリソースファイルでは使用できません

機能はビルドスクリプトファイルでは使用できません

機能は SQL/NoSQL ファイルおよびインジェクションでは利用できません

ここで説明する手順と例では、C# の機能の使用について説明します。 他の言語の詳細については、 言語およびフレームワーク セクションの対応するトピックを参照してください。

2026 年 6 月 12 日