在aspx文件中重新生成类名

时间:2017-05-04 09:43:53

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

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

根据我的理解,这些文件包含从主.cs文件中提取的代码,以避免开发人员使用它进行调整;为了使它工作,.cs文件和.designer.cs文件中的类被声明为partial。

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

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

1 个答案:

答案 0 :(得分:0)

我写了一个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