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 标记与字符串对应的符号范围,将此范围保存在其内部数据库中,并在包含文件发生更改时对其进行跟踪。这种方式非常快捷且直观,但存在两个缺点:在发生外部文件更改(例如 VCS 合并)后,该范围可能会丢失,而且以这种方式标记的注入仅会在本地进行跟踪。 这种方式非常快速且直接,但有两个缺点:范围可能在外部文件更改(例如 VCS 合并)后丢失,并且以这种方式标记的注入仅在本地跟踪:

使用 [StringSyntaxAttribute]
在面向 .NET 7 或更高版本的项目中,您可以使用 [StringSyntaxAttribute] 来标记包含字符串的方法参数、属性和字段。 JetBrains Rider 将根据属性构造函数在相应的字符串字面量中启用其编码辅助功能。
例如,如果您使用 StringSyntaxAttribute.Regex ,您可以在相应的字面量中利用 正则表达式辅助功能:
![JetBrains Rider:[StringSyntaxAttribute] 的编码辅助 JetBrains Rider:[StringSyntaxAttribute] 的编码辅助](https://resources.jetbrains.com/help/img/rider/2025.2/StringSyntaxAttribute_example.png)
使用 [RegexPatternAttribute]
您可以使用 [RegexPatternAttribute] 从 JetBrains.Annotations 标记接受正则表达式的方法参数、属性和字段。 这是推荐的正则表达式使用方式。
使用 [LanguageInjectionAttribute]
您可以使用 [LanguageInjectionAttribute] 从 JetBrains.Annotations 标记包含其他语言字符串的方法参数、属性和字段。
[LanguageInjectionAttribute] 被所有其他分析 C# 代码的 JetBrains 产品识别,例如 JetBrains ReSharper、 JetBrains Fleet 和 InspectCode 命令行工具。
![JetBrains Rider:使用 [LanguageInjectionAttribute] 标记注入的语言 JetBrains Rider:使用 [LanguageInjectionAttribute] 标记注入的语言](https://resources.jetbrains.com/help/img/rider/2025.2/language_injection_attribute.png)
您还可以在属性中使用 前缀 和 后缀 参数处理不完整的代码块。 例如,如果字符串仅包含 CSS 属性列表,您可以使用这些参数将字符串作为有效的 CSS 语句处理:
使用注释
您可以在字符串字面量之前添加注释 /*language=javascript|html|regexp|jsregexp|json|css|xml*/。 这种方法类似于使用 [LanguageInjectionAttribute] ,但它适用于变量,不适用于方法参数,并且也适用于 C# 之外的情况。 尽管注释和属性需要一些输入,您甚至可能认为它们会污染您的代码,但它们使您的意图对阅读代码的每个人都清晰可见,它们不会丢失,并且任何打开您的代码的人都可以在 JetBrains Rider 中获得相同的标记字符串功能。
注入注释的格式与 JetBrains ReSharper 和 基于 IntelliJ 平台的 IDE 兼容。

您还可以在注释中使用 前缀= 和 后缀= 参数处理不完整的代码块。 例如,如果字符串仅包含 CSS 属性列表,您可以在其前添加以下注释: //language=css prefix=body{ postfix=}。 这将使 JetBrains Rider 将字符串解析为有效的 CSS。