Регенерировать имена классов в файлах aspx

Я пытаюсь преобразовать веб-сайт (веб-формы) в веб-приложение (также веб-формы). Я преобразовал все файлы с помощью "Преобразовать в веб-приложение" из Visual Studio; это создало кучу файлов designer.cs.

Из того, что я понимаю, эти файлы содержат код, который извлекается из основного файла.cs, чтобы разработчики не вмешивались в него; и чтобы заставить его работать, классы как в файле.cs, так и в файле.designer.cs объявляются частичными.

К сожалению, при разработке страниц.aspx код, стоящий за классом, часто назывался случайным образом (часто просто "Page"), и теперь я обнаружил множество ошибок компиляции, которые находят конфликтующие имена между частичными классами всех этих страниц.

Есть ли способ переименовать эти имена классов в нечто подходящее, чтобы они не конфликтовали друг с другом? Даже просто что-то на основе пути к файлу будет достаточно.

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
Другие вопросы по тегам