语言注入
如果字符串字面量(或类似 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。
在某些情况下,可以明确检测到另一个语言文件中的语言片段,例如 HTML 中的 <script></script> 标签内的 JavaScript 或 style 属性中的 CSS。 在这些情况下,ReSharper 会自动检测嵌入的语言。 如果需要,您可以在 ReSharper 选项 的 页面上为特定情况配置自动语言注入。
Alt+R, O
当字符串字面量中的形式语言无法自动检测时,ReSharper 允许您通过以下方式之一手动标记该字面量为包含特定语言:
使用上下文操作
当您的光标位于嵌入语言块内时,您可以按 Alt+Enter 并使用上下文操作。
此操作实际上是指示 ReSharper 标记对应字符串的符号范围,将此范围保存在其内部数据库中,并在包含文件发生更改时持续跟踪该范围。此方式非常快捷且直观,但存在两个缺点:在发生外部文件更改(如 VCS 合并)后,该范围可能会丢失,并且以这种方式标记的注入内容仅会在本地进行跟踪。 这种方式非常快速和直接,但有两个缺点:范围可能在外部文件更改(例如 VCS 合并)后丢失,并且以这种方式标记的注入仅在本地跟踪:

使用 [StringSyntaxAttribute]
在面向 .NET 7 或更高版本的项目中,您可以使用 [StringSyntaxAttribute] 来标记包含字符串的方法参数、属性和字段。 ReSharper 将根据属性构造函数在相应的字符串字面量中启用其编码辅助功能。
例如,如果您使用 StringSyntaxAttribute.Regex ,您可以在相应的字面量中利用 正则表达式辅助功能:
![ReSharper:为 [StringSyntaxAttribute] 提供编码辅助 ReSharper:为 [StringSyntaxAttribute] 提供编码辅助](https://resources.jetbrains.com.cn/help/img/dotnet/2025.2/StringSyntaxAttribute_example.png)
使用 [RegexPatternAttribute]
在 C# 中,您可以使用 [RegexPatternAttribute] 从 JetBrains.Annotations 标记接受正则表达式的方法参数、属性和字段。 这是推荐的正则表达式使用方式。
使用 [LanguageInjectionAttribute]
在 C# 中,您可以使用 [LanguageInjectionAttribute] 从 JetBrains.Annotations 标记包含其他语言字符串的方法参数、属性和字段。
[LanguageInjectionAttribute] 被所有其他分析 C# 代码的 JetBrains 产品识别,例如 JetBrains Rider、 JetBrains Fleet 和 InspectCode 命令行工具。
![ReSharper:使用 [LanguageInjectionAttribute] 标记注入的语言 ReSharper:使用 [LanguageInjectionAttribute] 标记注入的语言](https://resources.jetbrains.com.cn/help/img/dotnet/2025.2/language_injection_attribute.png)
您还可以在属性中使用 前缀 和 后缀 参数来处理不完整的代码块。 例如,如果字符串仅包含 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# 中使用该功能。 有关其他语言的更多信息,请参阅 语言和框架 部分中的相应主题。