【问题标题】:Regenerate class names in aspx files在 aspx 文件中重新生成类名
【发布时间】:2017-10-02 10:10:52
【问题描述】:

我正在尝试将网站(Web 表单)转换为 Web 应用程序(也是 Web 表单)。我已经通过 Visual Studio 中的“转换为 Web 应用程序”转换了所有文件;这创建了一堆 Designer.cs 文件。

据我了解,这些文件包含从主 .cs 文件中提取的代码,以避免开发人员对其进行修改;并使其正常工作,将 .cs 文件和 .designer.cs 文件中的类声明为部分。

不幸的是,在开发 .aspx 页面时,类后面的代码通常是随机命名的(通常只是“页面”),现在我发现很多编译错误,这些错误会在所有这些不同页面的部分类之间找到冲突的名称。

有没有办法将这些类名重新生成为适当的名称,以免它们相互冲突?即使只是基于文件路径的东西也足够了。

【问题讨论】:

  • 也许您可以在从网站转换为 Web 应用程序之前重命名文件背后的代码。
  • 我同意,这是最好的做法。在转换之前准备项目。
  • 手动重命名它们可能不是一种选择。这需要几天时间。
  • 你试过 ReSharper 吗?

标签: c# asp.net webforms web-application-project


【解决方案1】:

我编写了一个 Python 脚本来执行此操作。如果有人需要,这里是:

import fnmatch
import os
import re

def get_all_aspx_files(dir):
    aspx_files = []
    for root, dirnames, filenames in os.walk(dir):
        for filename in fnmatch.filter(filenames, '*.aspx'):
            aspx_files.append(os.path.join(root, filename))
    return aspx_files

def generate_class_name(file):
    class_name = file\
        .replace('./', '')\
        .replace('/', '_')\
        .replace('-', '_')\
        .replace('.aspx', '')
    return class_name

def inplace_regex_replace(filename, pattern, replace):
    with open(filename) as f:
        s = f.read()
    with open(filename, 'w') as f:
        s = re.sub(pattern, replace, s)
        f.write(s)

aspx_files = get_all_aspx_files('.')
for file in aspx_files:
    cs_file = file + '.cs'
    designer_cs_file = file + '.designer.cs'
    class_name = generate_class_name(file)
    inplace_regex_replace(file, 'Inherits="[A-Za-z0-9_]+"', 'Inherits="%s"' % class_name)
    inplace_regex_replace(cs_file, 'public partial class [A-Za-z0-9_]+', 'public partial class %s' % class_name)    
    try:
        inplace_regex_replace(designer_cs_file, 'public partial class [A-Za-z0-9_]+', 'public partial class %s' % class_name)
    except IOError as e:
        print e

你只需要把它放在你项目的根目录,然后运行它:

python script.py

【讨论】:

    猜你喜欢
    • 2010-09-07
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多