Регенерировать имена классов в файлах 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