2017-05-04 29 views
0

我试图将一个网站(web表单)转换为一个Web应用程序(也是web表单)。我已经通过Visual Studio中的“转换为Web应用程序”转换了所有文件;这创建了一堆designer.cs文件。在aspx文件中重新生成类名

从我所理解的这些文件中包含的代码是从主要的.cs文件中提取的,以避免开发人员对它进行锻炼;并使其工作在.cs文件和.designer.cs文件中的类声明为部分。

不幸的是,当开发.aspx页面时,类后面的代码通常是随机命名的(通常只是“页面”),现在我发现了大量的编译错误,在所有这些不同的页面之间发现了冲突的名称partial class。

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

+0

也许你可以在你面前的文件后面的代码重新命名从网站转换为Web应用程序。 –

+0

我同意,这是最好的事情。在转换之前准备好项目。 –

+0

手动重命名可能不是一个选项。这将需要几天。 – Shoe

回答

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