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

ASP.NET MVC5项目快速本地化:如何提取所有硬编码字符串?

提取ASP.NET MVC5项目中所有硬编码字符串的实用方案

针对你ASP.NET MVC5项目里需要提取所有硬编码字符串的需求,我之前帮朋友处理过类似场景,试过几个靠谱的方案,能覆盖ReSharper和NDepend没抓到的角落,给你详细说说:

1. 基于Roslyn的自定义字符串提取工具

Roslyn是.NET的编译器平台,能深度遍历代码的语法树,不管是Controllers里的C#代码,还是CSHTML视图里的Razor代码,都能精准抓到所有字符串字面量。你可以写一个简单的控制台程序来实现:

using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using System.IO;
using System.Linq;

class StringExtractor
{
    static void Main(string[] args)
    {
        // 遍历项目里的所有.cs和.cshtml文件
        foreach (var filePath in Directory.EnumerateFiles(@"你的项目根路径", "*.*", SearchOption.AllDirectories)
            .Where(f => f.EndsWith(".cs") || f.EndsWith(".cshtml")))
        {
            var code = File.ReadAllText(filePath);
            var tree = CSharpSyntaxTree.ParseText(code);
            var root = tree.GetRoot();

            // 查找所有字符串字面量节点
            var stringLiterals = root.DescendantNodes().OfType<LiteralExpressionSyntax>()
                .Where(l => l.Kind() == SyntaxKind.StringLiteralExpression);

            foreach (var literal in stringLiterals)
            {
                Console.WriteLine($"文件: {filePath} | 字符串: {literal.Token.ValueText}");
            }
        }
    }
}

这个程序会输出所有.cs和.cshtml文件里的硬编码字符串,哪怕是单个字符的"a"也不会漏掉。

2. Visual Studio正则全局查找(快速上手)

如果不想写代码,用VS自带的全局查找功能配合正则表达式就能快速搞定:

  • 打开VS的“查找和替换”窗口(Ctrl+Shift+F)
  • 查找内容输入正则:"(.*?)"
  • 选择“整个解决方案”,并勾选“使用正则表达式”
  • 点击“查找全部”,就能看到所有匹配的硬编码字符串

虽然会抓到一些不需要的(比如配置文件里的字符串),但你可以通过筛选文件类型(只看.cs和.cshtml)来缩小范围,适合临时快速提取。

3. StyleCop Analyzers 代码规范工具

StyleCop Analyzers不仅能检查代码规范,还能配置规则检测所有硬编码字符串:

  • 在NuGet里给项目安装StyleCop.Analyzers包
  • 打开项目的.editorconfig文件,添加规则:dotnet_diagnostic.SA1300.severity = warning(这个规则检测非资源文件的硬编码字符串)
  • 等待VS分析完成后,在“错误列表”里就能看到所有硬编码字符串的位置,还能导出报告

它能自动排除资源文件里的字符串,同时覆盖C#代码和Razor视图。

4. PowerShell脚本遍历CSHTML视图

如果主要担心视图里的字符串没被抓到,可以写个简单的PowerShell脚本,遍历所有.cshtml文件提取字符串:

$projectPath = "你的项目根路径"
Get-ChildItem -Path $projectPath -Filter *.cshtml -Recurse | ForEach-Object {
    $content = Get-Content $_.FullName -Raw
    $strings = [regex]::Matches($content, '"([^"]*)"') | ForEach-Object { $_.Groups[1].Value }
    foreach ($str in $strings) {
        Write-Host "文件: $($_.FullName) | 字符串: $str"
    }
}

这个脚本会提取视图里所有用双引号包裹的字符串,配合前面的C#代码提取,就能覆盖整个项目。

小提示

如果后续需要过滤掉无意义的短字符串(比如"a"),可以在提取结果里用简单的字符串长度过滤,比如只保留长度大于2的字符串,这样能减少后续整理的工作量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:42:43