ReSharper 2025.2 Help

语言注入

如果字符串字面量(或类似 XML 的语言中的标签/属性)包含其他形式语言,例如正则表达式、HTML 等,ReSharper 可以提供 代码检查快速修复代码补全上下文操作 以及许多其他特定于该语言的功能,直接在此片段中使用。

ReSharper 支持在 C#、JavaScript 和 TypeScript 字符串字面量中使用以下语言:

从 ReSharper 2022.2 开始,JavaScript、TypeScript、JSON、CSS 和 Protobuf 的生产力功能的主动开发已暂停,这些功能默认被禁用。 要启用这些功能,请在 ReSharper 选项 的 环境 | 产品与功能 页面中选中相应的复选框 Alt+R, O JavaScript 和 TypeScriptCSS 语言Protobuf

在某些情况下,可以明确检测到另一个语言文件中的语言片段,例如 HTML 中的 <script></script> 标签内的 JavaScript 或 style 属性中的 CSS。 在这些情况下,ReSharper 会自动检测嵌入的语言。 如果需要,您可以在 ReSharper 选项 的 代码编辑 | 语言注入 页面上为特定情况配置自动语言注入。 Alt+R, O

当字符串字面量中的形式语言无法自动检测时,ReSharper 允许您通过以下方式之一手动标记该字面量为包含特定语言:

使用上下文操作

当您的光标位于嵌入语言块内时,您可以按 Alt+Enter 并使用上下文操作。

此操作实际上是指示 ReSharper 标记对应字符串的符号范围,将此范围保存在其内部数据库中,并在包含文件发生更改时持续跟踪该范围。此方式非常快捷且直观,但存在两个缺点:在发生外部文件更改(如 VCS 合并)后,该范围可能会丢失,并且以这种方式标记的注入内容仅会在本地进行跟踪。 这种方式非常快速和直接,但有两个缺点:范围可能在外部文件更改(例如 VCS 合并)后丢失,并且以这种方式标记的注入仅在本地跟踪:

ReSharper:分析 C# 字符串字面量中的 CSS 代码

使用 [StringSyntaxAttribute]

在面向 .NET 7 或更高版本的项目中,您可以使用 [StringSyntaxAttribute] 来标记包含字符串的方法参数、属性和字段。 ReSharper 将根据属性构造函数在相应的字符串字面量中启用其编码辅助功能。

例如,如果您使用 StringSyntaxAttribute.Regex ,您可以在相应的字面量中利用 正则表达式辅助功能

ReSharper:为 [StringSyntaxAttribute] 提供编码辅助

使用 [RegexPatternAttribute]

在 C# 中,您可以使用 [RegexPatternAttribute]JetBrains.Annotations 标记接受正则表达式的方法参数、属性和字段。 这是推荐的正则表达式使用方式。

使用 [LanguageInjectionAttribute]

在 C# 中,您可以使用 [LanguageInjectionAttribute]JetBrains.Annotations 标记包含其他语言字符串的方法参数、属性和字段。

[LanguageInjectionAttribute] 被所有其他分析 C# 代码的 JetBrains 产品识别,例如 JetBrains RiderJetBrains FleetInspectCode 命令行工具

ReSharper:使用 [LanguageInjectionAttribute] 标记注入的语言

您还可以在属性中使用 前缀后缀 参数来处理不完整的代码块。 例如,如果字符串仅包含 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# 中使用该功能。 有关其他语言的更多信息,请参阅 语言和框架 部分中的相应主题。

最后修改日期: 2025年 9月 27日