You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core中如何查找并移除ResourceManager的未使用密钥

在ASP.NET Core中查找并移除ResourceManager未使用密钥的方法

全局文本搜索

直接用Visual Studio的「查找全部」(快捷键Ctrl+Shift+F),针对每个资源密钥名称进行全项目搜索,覆盖所有.cs、.razor、.cshtml等代码文件。如果搜索结果为空,基本可以确定该密钥未被代码引用。
如果项目用了强类型资源类(比如自动生成的Resources类),直接搜索类的属性名(如Resources.MyKey)即可,比搜字符串更精准。

自定义Roslyn分析器(适合大型项目)

手动搜索效率低的话,可以写一个Roslyn分析器自动扫描:

  1. 遍历代码语法树,识别ResourceManager.GetString、IStringLocalizer等资源调用,提取传入的密钥参数,记录已使用的密钥集合。
  2. 解析.resx/.resw资源文件,读取所有密钥列表。
  3. 对比两个集合,筛选出未被使用的密钥。

简化版核心逻辑代码:

// 提取代码中已使用的资源密钥
var usedKeys = new HashSet<string>();
var syntaxTree = CSharpSyntaxTree.ParseText(File.ReadAllText("YourCodeFile.cs"));
foreach (var invocation in syntaxTree.GetRoot().DescendantNodes().OfType<InvocationExpressionSyntax>())
{
    if (invocation.Expression.ToString().Contains("ResourceManager.GetString"))
    {
        var arg = invocation.ArgumentList.Arguments.FirstOrDefault();
        if (arg?.Expression is LiteralExpressionSyntax literal)
        {
            usedKeys.Add(literal.Token.Value.ToString());
        }
    }
}

// 读取resx文件的所有密钥
var allKeys = XDocument.Load("Resources.resx")
                       .Descendants("data")
                       .Select(d => d.Attribute("name").Value)
                       .ToList();

// 得到未使用的密钥
var unusedKeys = allKeys.Except(usedKeys).ToList();

借助第三方IDE工具

像ReSharper、Rider这类IDE工具自带未使用资源检测功能:打开.resx文件后,工具会自动高亮未被代码引用的密钥条目,右键选择删除即可批量清理,还能同步处理多语言资源文件的对应条目。

关键注意事项

  • 动态调用场景:如果代码中存在ResourceManager.GetString(variableKey)这类动态传参的情况,静态分析无法覆盖,需要结合运行时日志或监控确认这些动态密钥是否真的未被使用。
  • 多语言资源:删除主资源文件的密钥时,要同步删除对应语言版本(如Resources.zh-CN.resx)的同名条目,避免本地化缺失。
  • 先备份:操作前务必备份所有.resx文件,防止误删有用资源后无法恢复。

内容的提问来源于stack exchange,提问作者Mehdi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 13:15:08