Ответ 1
Попробуйте использовать Resharper. Я использовал его в прошлом для рефакторинга именных пространств с высоким ссылочным именем, как полностью квалифицированных, так и импортированных без каких-либо проблем.
Я пытаюсь переместить класс с высокой степенью ссылки из одного пространства имен в другое. Простое перемещение файла в новый проект с другим корневым пространством имен приводит к более чем 1100 ошибкам в моем решении.
Некоторые ссылки на класс включают полностью квалифицированные ссылки на namescape, а другие - импорт пространства имен.
Я попытался использовать инструмент рефакторинга (Refactor Pro), чтобы переименовать пространство имен, в надежде, что все ссылки на класс изменились бы, но это привело к вышеупомянутой проблеме.
У кого-нибудь есть идеи о том, как решить эту проблему без необходимости вручную сверять все файлы и изменять полное пространство имен или импортировать новое, если оно еще не существует?
Спасибо.
Попробуйте использовать Resharper. Я использовал его в прошлом для рефакторинга именных пространств с высоким ссылочным именем, как полностью квалифицированных, так и импортированных без каких-либо проблем.
Здесь Powershell script, который я использовал, чтобы выполнить больное переименование пространства имен. В моей ситуации было около 5000 исходных файлов VB.Net и С#, которые сильно использовали общую библиотеку (CSLA). По причинам, которые не стоит обсуждать, мне нужно было переименовать пространство имен Csla в CslaLegacy. С минимальными усилиями вы сможете адаптировать этот script к вашим конкретным потребностям. script рекурсивно ищет исходное дерево, ищущее файлы .vb и .cs. Таблица хешей $repValues содержит строки, которые необходимо заменить. Вариант этого script также может использоваться для обновления ссылок на проекты, если ваше переименование включает изменение имени сборки. Вы можете добавить вызов к исходному инструменту управления, чтобы проверить файл перед модификацией. Я изначально сделал это для TFS, но нашел медленным выполнение tf.exe. В конце было намного быстрее просто проверить всю исходную таблицу перед запуском script. Я использую PowerGUI script редактор для отладки и запуска скриптов powershell.
$root = "c:/path/to/your/source"
cd $root
$files = Get-ChildItem -Path $root -Recurse -include *.cs,*.vb
$repValues =
@{
'using Csla;' = 'using CslaLegacy;';
'using Csla.Validation;' = 'using CslaLegacy.Validation;';
'using Csla.Data;' = 'using CslaLegacy.Data;';
'Imports Csla' = 'Imports CslaLegacy';
'Imports Csla.Validation' = 'Imports CslaLegacy.Validation';
}
$stmtsToReplace = @()
foreach ($key in $repValues.Keys) { $stmtsToReplace += $null }
$repValues.Keys.CopyTo($stmtsToReplace, 0)
foreach ($file in $files)
{
$path = [IO.Path]::Combine($file.DirectoryName, $file.Name)
$sel = Select-String -Pattern $stmtsToReplace -Path $path -l
if ($sel -ne $null)
{
write "Modifying file $path"
(Get-Content -Encoding Ascii $path) |
ForEach-Object {
$containsStmt = $false
foreach ($key in $repValues.Keys)
{
if ($_.Contains($key))
{
$_.Replace($key, $repValues[$key])
$containsStmt = $true
break
}
}
if (!$containsStmt) { $_ }
} |
Set-Content -Encoding Ascii $path
}
}
Я не буду, если это будет полезно в вашем случае.
Если вы используете инструмент типа ReSharper, нажмите на пространство имен и нажмите Ctrl + R. Следуйте инструкциям в диалоговом окне "Переименовать пространство имен".
Похоже, вы не должны сталкиваться с большими трудностями при выполнении глобального поиска и замене на полное имя. Итак, выполните поиск для всех в oldspace:: myclass и замените его на newspace:: myclass. Добавление строк в верхнюю часть файла также не очень сложно, и вы могли бы заменить
using oldspace;
с
using oldspace;
using newspace;
Конечно, есть определенные риски с подобным подходом. Это довольно легко вызвать у вас тонкие проблемы.
Еще одна причина переключиться на c sharp. Рефакторинг исходного кода, созданного бесплатно в VS 2008.