как изменить пространство имен всего проекта?

104

Я модифицирую демонстрационное приложение из этой статьи: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

Мне нужно обновить все файлы, чтобы использовать мое пространство имен, например, теперь файл находится здесь:

MySolution\MyApp\DemoApp\ViewModel\MainWindowViewModel.cs

использует такое пространство имен:

namespace DemoApp.ViewModel
{
/// <summary>
/// The ViewModel for the application's main window.
/// </summary>
public class MainWindowViewModel : WorkspaceViewModel

Мне нужно переместить файл сюда (удалить папку DemoApp):

MySolution\MyApp\ViewModel\MainWindowViewModel.cs

а также использовать правильное пространство имен:

namespace MyApp.ViewModel
{
....

как это сделать в Visual Studio 2010?

Обновить нормально, здесь возможно дублирование Изменить пространство имен проекта в Visual Studio Теперь я знаю, как изменить пространство имен проекта, но как перемещать файлы в файловой системе? (избавьтесь от папки "DemoApp")

Явный
источник
4
Как и для справки, вам необязательно, чтобы пространства имен соответствовали структуре папок в .NET, это не обязательно.
Джеймс Майкл Хэйр
1
Как сказал Джеймс, это не обязательно ... но я бы спросил, почему кто-то не «закончил работу» над приложением, над которым мне нужно было работать.
NotMe
1
Что касается перемещения файлов ... Вырезать / вставить и перетащить / отпустить обычно работает в диспетчере решений Visual Studio ... или даже просто переименовать папку или удалить. в зависимости от того, что вы действительно пытаетесь сделать.
NotMe

Ответы:

124

Я полагаю, что простая замена в файлах ( Ctrl+ Shift+ H) как раз поможет; просто замените namespace DemoAppна namespace MyApp. После этого соберите решение и ищите ошибки компиляции для неизвестных идентификаторов. Все, что полностью соответствует требованиям DemoApp, необходимо будет заменить на MyApp.

Адам Марас
источник
62
Важный; также измените пространство имен по умолчанию в свойствах проекта; это контролирует пространство имен для таких вещей, как resx
Марк Грейвелл
У меня есть пара файлов XAML, представляющих окна WPF, поэтому у меня это не сработает.
Питер
6
Вы также должны запустить Replace для любых usingоператоров, которые нужно изменить с using DemoAppна using Myapp.
swbandit
5
также переименуйте <add namespace = "OldNameSpace" /> во всех файлах web.config в папке представлений
neo112,
@Pieter Вы должны иметь возможность заменить все для всего приложения с последующим обновлением свойств, как предлагает Марк, затем закрыть решение и снова открыть его, иначе VS будет иметь необъяснимое поведение с некоторым автоматическим завершением.
Эрик
153

Перейдите в место, где пространство имен объявлено в одном из ваших файлов. Поместите курсор в ту часть пространства имен, которую вы хотите изменить, и нажмите F2. Это должно переименовать пространство имен в каждом файле. По крайней мере, это сработало в моем небольшом демонстрационном проекте, который я создал, чтобы проверить этот ответ!

В зависимости от вашей версии VS ярлык также может быть Ctrl- R, Ctrl- R.

Эми
источник
1
у меня почему-то не работает. Нажимаю F2 и ничего не происходит.
javapowered
6
@javapowered, значит, ваша горячая клавиша была настроена. Поищите в вариантах VS свой. Сегодня у меня CTRL-R CTRL-R.
Эми
4
Примечание. Хотя я по-прежнему предпочитаю этот метод, он [по понятным причинам] не смог заменить ссылки в представлениях и в файле web.config, содержащемся в каталоге Views /. Просто следите за ними.
Wiseguy
3
Для версии, которая не должна зависеть от изменений горячих клавиш, просто щелкните правой кнопкой мыши имя пространства имен и выберите переименовать.
Кэт
3
К сожалению, это не сработает, если вы хотите, чтобы новое имя содержало .символ.
Botond Balázs
27

Просто щелкните решение правой кнопкой мыши, перейдите в свойства, измените «пространство имен по умолчанию» в разделе «Приложение».

введите описание изображения здесь

Ануджа Ламахева
источник
3
Изменяет ли он пространство имен в существующих файлах?
Приеш Кумар
5
Нет, не будет.
Ануджа Ламахева 08
3

Ctrl+ Shift+ Hне настоящее решение.

Вы можете использовать Resharper, чтобы изменить все определения пространств имен в вашем решении. Это лучший способ, который я пробовал раньше.

https://www.jetbrains.com/resharper/features/code_refactoring.html

Сельчук Ермая
источник
2
resharper требует полноценный дорогой настольный компьютер
Иван Г.
@IvanG. ну, многие коммерческие проекты также требуют полномасштабных дорогостоящих разработчиков, поэтому машина и лицензия R # не слишком дороги в более широком плане;) Если вам нужно проверить, что этот метод (или метод Адама или Эми) работает правильно , вы можете посмотреть
статью «
1
@StuartLC, к сожалению, прошли дни выделенного рабочего места и большого рабочего стола, я использую действительно мощный ноутбук для разработки, и resharper практически убивает его, поэтому я не рекомендую его всем, кто ценит время.
Иван Г.
Ребята, вы можете просто использовать для бесплатного переименования :-) Установите его, активируйте бесплатную пробную версию, переименуйте и удалите, если хотите ;-)
Сельчук Ермая
1

Я просмотрел структуру папок с помощью инструмента BareGrep, чтобы убедиться, что у меня есть все изменения пространства имен. Это бесплатный инструмент, который позволит вам искать файлы в указанной файловой структуре.

Майкл Мерфи
источник
файл соответствует REGEX: (.exe) | (.dll) | (.cache) | (.pdb), затем инвертирует совпадение . повторите этот шаблон, чтобы исключить другие двоичные файлы и так далее.
twobob 01
1

Вы можете использовать ReSharper для рефакторинга пространства имен. Это даст 30-дневную бесплатную пробную версию. Это изменит nameapce в соответствии со структурой папок.

Шаги:

1) Щелкните правой кнопкой мыши проект / папку / файлы, которые вы хотите реорганизовать.

2) Если вы установили ReSharper, вы получите опцию Refactor-> Adjust Namespaces .... Итак, нажмите на это.

введите описание изображения здесь

Он автоматически изменит пространства имен всех выбранных файлов.

Chindirala Sampath Kumar
источник
Спасибо .. Мне это удалось.
sgowd
0

Я пробовал все, но нашел решение, которое действительно работает. Он создает независимое решение с новым именем пространства имен и так далее.

  1. В главной форме найдите имя пространства имен -> щелкните правой кнопкой мыши -> Рефакторинг -> Переименовать и выберите новое имя. Установите все флажки и нажмите ОК.

  2. В обозревателе решений переименуйте имя решения на новое имя.

  3. В обозревателе решений переименуйте проект в новое имя.

  4. Закройте VS и переименуйте папку (например, в total commander) в папке решения на новое имя.

  5. В файле .sln переименуйте старое имя в новое.

  6. Удалить старые файлы .suo (скрыто)

  7. Запустить VS и загрузить проект

  8. Проект -> свойства -> измените имя сборки и пространство имен по умолчанию на новое имя.

Марош
источник
0

Я знаю, что это довольно поздно, но для тех, кто хочет это сделать с этого момента, я надеюсь, что этот ответ окажет некоторую помощь. Если у вас установлена CodeRush Express( бесплатная версия и обязательная), она предлагает простой способ изменить пространство имен проекта. Вы просто помещаете курсор в пространство имен, которое хотите изменить, и оно отобразит smart tag(маленькое синее поле) под namespaceстрокой. Вы можете щелкнуть это поле или нажать Ctrl +клавиши, чтобы увидеть Renameопцию. Выберите его, а затем введите новое имя для всего пространства имен проекта, щелкните Applyи выберите, какие места в вашем проекте вы хотите изменить, в новом диалоговом окне и в OKнем. Готово! :-)

Кунал
источник
По моему опыту, CodeRush Express не является обязательным (личное мнение). Это удобно для таких вещей.
Maarten
0

Когда я хотел изменить пространство имен и имя решения, я сделал следующее:
1) изменил пространство имен, выбрав и переименовав его, и я сделал то же самое с именем решения
2) щелкнул лампочку и переименовал все экземпляры старого пространства имен
3 ) удалил все проекты из решения
4) закрыл визуальную студию
5) переименовал все проекты в проводнике Windows
6) открыл визуальную студию и снова добавил все проекты
7) переименовал пространства имен во всех проектах в их свойствах
8) удалил папку bin ( из всех проектов)
9) построить проект заново

Это сработало для меня без каких-либо проблем, и в моем проекте также был контроль версий. Все было в порядке после внесения этих изменений в пульт.

прземас
источник