Правильный способ переименования решения (и каталогов) в Visual Studio


415

У меня довольно сложное решение Visual Studio (2010, но это не должно иметь значения), которое мне нужно переименовать.

Я хочу переименовать папки, чтобы они соответствовали новому названию решения, но я не могу найти способ автоматического рефакторинга имен папок, и просмотр каждого отдельного файла проекта будет болезненным.

Есть ли официальный способ сделать это? В качестве альтернативы (и гораздо менее предпочтительно), есть ли бесплатные инструменты для этого?



13
Как это дубликат? Он просит переименовать решение, а не проект!
Викинг

Ответы:


375

Вручную отредактируйте файл .sln

Этот метод полностью нацелен на переименование каталога для проекта, как показано в проводнике Windows.

Этот метод не страдает от проблем в методе удаления / добавления файла проекта ниже (ссылки исчезают), но он может привести к проблемам, если ваш проект находится под контролем исходного кода (см. Примечания ниже). Вот почему шаг 2 (резервное копирование) так важен.

  1. Закройте Visual Studio.
  2. Создайте резервную копию вашего файла .sln (вы всегда можете откатиться).
  3. Представьте, что вы хотите переименовать каталог Project1в Project2.
  4. Если вы не используете систему контроля версий, переименуйте папку Project1в Project2Windows Explorer.
  5. При использовании системы управления версиями, переименуйте папку с Project1с Project2помощью функций , поставляемых управления версиями. Это сохраняет историю файла. Например TortoiseSVN, щелкните правой кнопкой мыши на файле и выберите TortoiseSVN .. Rename.
  6. В файле .sln отредактируйте все экземпляры объекта Project1be Project2с помощью текстового редактора, например NotePad .
  7. Перезапустите Visual Studio, и все будет работать как раньше, но с проектом в другом каталоге.

Вы также можете увидеть решение по переименованию вручную или опубликовать, которое описывает этот ручной процесс .

преимущества

  • Вы можете сделать так, чтобы каталог в Windows Explorer совпадал с именем проекта в решении.
  • Этот метод не удаляет ссылки из других проектов на этот файл (преимущество по сравнению с методом удаления / добавления файла проекта , см. Мой другой ответ ниже).

Предупреждения

  • Важно перезаписать все в файл .zip перед переименованием, так как этот метод может создать проблемы с контролем версий.
  • Если ваш проект находится под контролем исходного кода, он может создать проблемы, если вы переименуете файлы или каталоги вне контроля исходного кода (с помощью проводника Windows). Желательно переименовать файл, используя саму систему управления исходным кодом , если вы можете, чтобы сохранить историю этого файла (проверьте контекстное меню по щелчку правой кнопкой мыши - у него может быть функция для переименования файла).

Обновление 2014-11-02

ReSharper добавил автоматизированный метод для достижения того же результата, что и ручной метод, описанный выше. Если пространство имен подчеркнуто волнистой синей линией, щелкните значок пирамиды действий, чтобы:

  • Переименуйте пространство имен в соответствии с именем каталога в проводнике Windows или;
  • Переименуйте каталог в проводнике Windows, чтобы он соответствовал пространству имен.

Во втором случае последнее слово определяет имя нового каталога в проводнике Windows, например, если мы изменили пространство имен на ViewModel2, оно предложит переместить файл в папку ViewModel2.

Однако это не обязательно будет обновлять файлы в системе контроля версий, поэтому вам, возможно, придется использовать ручной метод.

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

Обновление 2018-01-31

Протестировано с Visual Studio 2008, 2010, 2012, 2013, 2015, 2017 Обновление 1, 2, 3, 4, 5.

Обновление 2020-05-02

Протестировано с Visual Studio 2019.


2
примечание: даже с VS2012 необходимо перезапустить, потому что в противном случае он может запутаться, и вы получите глупые ошибки
Simon_Weaver

1
«Если у вас есть контроль над исходным кодом, вы потеряете историю файла», для нас это немного серьезный недостаток (аудит и т. Д.). Существуют ли предлагаемые маршруты при сохранении истории?
dougajmcdonald

23
Visual Studio такая мощная программа, но эта функция не включена? вау ..
Лука Стиб

2
Даже после того, как я следовал решению, описанному @Contango, я все еще получал сообщение об ошибке: Атрибут OwinStartup обнаружен в сборке ... при запуске новое имя, которое конфликтует со старым именем. Я просмотрел папки obj и bin и удалил любой файл со старым именем, оставив все остальное без изменений. Перезапустил против моего недавно названного проекта, и это бежало как очарование! Поблагодарить!
nocturns2

2
@ LucaSteeb Да, по сообщениям, в 2012 году было около 50 миллионов строк кода. #monolithic
Chiramisu

158

Вот шаги, которые необходимо выполнить, чтобы переименовать решение:

  1. В обозревателе решений щелкните правой кнопкой мыши проект, выберите «Переименовать» и введите новое имя.
  2. В обозревателе решений щелкните правой кнопкой мыши проект и выберите «Свойства». На вкладке «Приложение» измените «Имя сборки» и «Пространство имен по умолчанию».
  3. В главном файле cs (или любых других файлах кода) переименуйте объявление пространства имен, чтобы использовать новое имя. Для этого щелкните правой кнопкой мыши пространство имен и выберите Refactor> Rename, введите новое имя. Например: namespace WindowsFormsApplication1
  4. Измените AssemblyTitle и AssemblyProduct в Свойствах / AssemblyInfo.cs.

    [assembly: AssemblyTitle("New Name Here")]
    [assembly: AssemblyDescription("")]
    [assembly: AssemblyConfiguration("")]
    [assembly: AssemblyCompany("")]
    [assembly: AssemblyProduct("New Name Here")]
    [assembly: AssemblyCopyright("Copyright ©  2013")]
    [assembly: AssemblyTrademark("")]
    [assembly: AssemblyCulture("")]
    
  5. Удалить каталоги bin и obj физически.

  6. Переименуйте каталог физической папки проекта.

  7. Откройте файл SLN (в блокноте или любом редакторе) и измените путь к проекту.

  8. Очистить и восстановить проект.


1
Это прекрасно работает! Но вам нужно управлять своими Datasetруками (если вы подключились к своему проекту).
Суджит HS

2
Работает! Мне также пришлось переименовать файлы .sln и .suo. И я обнаружил, что шаг 4 уже был выполнен одним из предыдущих шагов в моем VS 2010
патчи

3
Я немного сбит с толку относительно того, ссылаетесь ли вы на Решение или Проект на шаге 1. Я хочу переименовать оба, каждый с другим именем. Каким будет новое пространство имен, имя нового решения или имя проекта? Спасибо за разъяснение этого для меня.
Алан Фишер

1
Это работало и для меня (с использованием VS2013), но оно пропустило пути проекта в \Packages\repositories.configфайле.
Тед

1
Прежде чем пытаться повторно открыть решение, я использовал инструмент поиска Agent Ransack, чтобы найти во всех файлах и папках любую ссылку на предыдущее имя решения / проекта и исправить их. Было несколько мест, где мне нужно было это сделать.
Энди Г

31

Операции переименования в Visual Studio изменяют только имя файла, то есть для проекта * .prj и для решения * .sln. Вам нужно будет переименовывать папки отдельно, используя файловую систему, и вам нужно будет удалять и читать проекты, так как они будут иметь новые имена. Однако обратите внимание, что файлы решения и проекта - это соответственно файлы texst и xml. Вы можете написать свою собственную программу, которая анализирует их и переименовывает имена папок, имена файлов и внутренне исправляет файлы проекта / решения.


1
Есть ли бесплатные инструменты, которые уже делают это? Я не мог ничего найти.
Дэвид Пфеффер

5
Единственное, что может вам помочь, это CoolCommands 4.0 «Добавить проекты из папки», так что после удаления / переименования папок проекта вы можете сразу добавить их обратно: sharptoolbox.com/tools/coolcommands
AaronLS

1
возвышенный текст 2 имеет поиск по регулярному выражению и заменяет функции, которые облегчают работу с этим.
Jfyelle

22

Вы также можете экспортировать шаблон, а затем создать новый проект из экспортированного шаблона, меняя имя по своему усмотрению


1
Это сработало и для меня. Я должен был сделать одну корректировку, хотя. Я использовал сущностный каркас в веб-приложении, и он оставил старые файлы .dll под исходным именем проекта, поэтому мне пришлось выяснить, почему я получаю некоторый тип повторяющейся ошибки для классов таблиц. Как только я удалил их из проекта, все заработало нормально. Надеюсь, это поможет. И спасибо, Эдоардо!
Стив

2
Это абсолютно лучший способ сделать это, обратитесь к msdn.microsoft.com/en-us/library/…, чтобы увидеть, куда переместить экспортированный шаблон, чтобы найти его в диалоговом окне «Новый проект».
Ares Ou

13

Ниже приведен пошаговый способ переименования всего решения в Visual Studio 2013.

Предполагая, что мы меняем проект с именем «HelloWorld.ui» на «Section1to5.ui»

  1. Перейдите в обозреватель решений (скриншот ниже), щелкните правой кнопкой мыши проект, который вы хотите переименовать, и выберите «Переименовать». Введите новое имя, которое вы хотите.

Снимок экрана Solution Explorer

  1. Щелкните правой кнопкой мыши на проекте, который вы только что переименовали, и нажмите «Свойства». На вкладке «Приложение» измените «Имя сборки» и «Пространство имен по умолчанию».

  2. В главном файле Program.cs (или любых других файлах кода, которые вы, возможно, создали), переименуйте объявление пространства имен, чтобы использовать новое имя. Для этого щелкните правой кнопкой мыши пространство имен и выберите Refactor> Rename, введите новое имя. Например:

    пространство имен HelloWorld.ui ----> пространство имен Section1to5.ui

  3. Затем разверните «Свойства» и дважды щелкните файл AssemblyInfo.cs. Вы заметите фрагмент кода ниже:

[assembly: AssemblyTitle("HelloWorld.ui")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("HelloWorld.ui")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2015")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

Необходимо изменить AssemblyTitle и AssemblyProduct в Properties / AssemblyInfo.cs на новое имя, в этом примере с «HelloWorld.ui» на «Section1to5.ui». Как только вы закончите изменение имени, сохраните и закройте Visual Studio.

  1. В каталоге проекта перейдите в папку «HelloWorld.ui» и удалите каталоги «bin» и «obj».

  2. Как только вы закончите, переименуйте папку «HelloWorld.ui» в новое имя проекта.

  3. Откройте переименованный файл решений в текстовом редакторе, таком как Notepad или Notepad ++, и отредактируйте следующую строку:

    Project ("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HelloWorld.ui", "HelloWorld.ui \ HelloWorld.ui.csproj", "{39FC65A3-3AE7-4EC9-B8F7-74F971636C70}"

Замените все экземпляры «HelloWorld.ui» новым именем, которое вы выбрали для своего проекта, в данном случае «Section1to5.ui». Это изменяет путь проекта к переименованному каталогу на шаге 6.

  1. Откройте файл решений в Visual Studio, очистите и восстановите проект.

  2. Вы можете заметить, что кнопка «Debug / Run» была заменена кнопкой «Attach». Если это произойдет, просто щелкните правой кнопкой мыши по проекту и выберите «Установить как проект запуска». В качестве альтернативы нажмите Инструменты> Настройка> Команды> Добавить команду> Отладка и добавьте кнопку.

Вы закончили переименование проекта, если у вас есть какие-либо сомнения, не стесняйтесь писать, и я был бы рад помочь!


6

Удалите подпапки bin и obj, чтобы удалить неправильную ссылку, а затем используйте окна для поиска старого имени.

Отредактируйте любой найденный код или xml-файлы и восстановите его, теперь все должно быть в порядке.


5

Я использовал расширение Visual Studio «Полный проект переименования» для успешного переименования проектов в решении ASP.NET Core 2.

Затем я использовал ReSharper для настройки пространства имен (щелкните правой кнопкой мыши проект, рефакторинг, настройте пространства имен ...)

https://github.com/kuanysh-nabiyev/RenameProjectVsExtension

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


Похоже, что это было перенесено сюда: github.com/kuanysh-nabiyev/RenameProjectVsExtension
ToastedSoul


4

Я попробовал Visual Studio Project Renamer, но он выдал исключения в тех немногих случаях, когда я его пробовал.

У меня был хороший успех с CopyWiz .

Я никоим образом не связан с ними, и я еще не заплатил за это, но мне, возможно, придется скоро, так как это единственный инструмент, который, кажется, работает и для моих проектов C # и C ++. Я надеюсь, что они заработают немного денег и продолжат улучшать их.


4

Удалить / добавить метод файла проекта

Этот метод полностью нацелен на переименование каталога для проекта, как показано в проводнике Windows.

  1. Сделайте резервную копию всего проекта, используя что-то вроде GIT, SVN или WinZip (важно!).
  2. В рамках решения в Visual Studio удалите проект.
  3. Переименуйте каталог в проводнике Windows.
  4. Снова добавьте проект обратно в Visual Studio.

преимущества

  • Вы можете сделать так, чтобы каталог в Windows Explorer совпадал с именем проекта в решении.

Недостатки

  • Если вы удаляете библиотеку, она удаляет любые ссылки на указанную библиотеку из других проектов. Решение может не скомпилироваться после этого, пока вы не добавите ссылки на указанную библиотеку обратно (это довольно просто). Это причина, почему шаг 1 (резервное копирование) так важен.
  • Если у вас есть контроль версий, вы потеряете историю файла.

Щелкнув правой кнопкой мыши по проекту и выбрав «Открыть папку в проводнике Windows», полезно отслеживать, где хранится проект, пока вы выполняете этот процесс.


4
WinZip ??? Я очень надеюсь, что вы используете реальный контроль исходного кода, а не делаете резервные копии zip-файлов вашего кода. Если вы или кто-либо еще, кто читает это, то, пожалуйста, проверьте try.github.io и попробуйте его в тестовом проекте. Ты не вернешься!
Мэтт Кляйн

2
Я прочитал ваш комментарий, мистер @MattKlein, и вы были правы: D Спасибо!
Джанкарло Фонтальво

@Matt Klein Полностью согласен, обновлен, чтобы рекомендовать GIT или SVN.
контанго

3

Вы можете:

  1. нажмите файл-> новый -> создать проект из существующего проекта

  2. выберите ваш оригинальный файл, например. решение 1 и введите новое имя файла решение 2

  3. изменить имя проекта в новом решении 2


Мне очень нравится этот подход, это понизили по определенной причине?
Курятник

закрыл мою машину ближе к концу - на Visual Studio 2017
klewis

3

Если у вас есть проблемы с загрузкой общих проектов, таких как Xamarin, не забудьте изменить ссылку на общие библиотеки в файлах csproj. Я разработал игру CocosSharp, и проекты Droid / iOS / WP81 не хотели загружаться. Мне приходилось менять строку ниже в каждом файле csproj (Driod / iOS / WP81), который ссылался на Shared lib. Это было вызвано изменением имен папок, поэтому замените YOUR_PREVIOUS_NAMESPACE новыми именами папок.

<Import Project="..\YOUR_PREVIOUS_NAMESPACE.Shared\EmptyProject.Shared.projitems" Label="Shared" />

Также я заметил, что для проектов .Driod имя сборки в свойствах проекта нельзя изменить с помощью Visual Studio (я использую 2015). Мне пришлось изменить имя сборки вручную в файле .Droid.csproj.

<AssemblyName>YourNameSpace</AssemblyName>

Затем я загрузил решение и в окне свойств проекта появилось новое имя. После перестройки dll с таким именем был сгенерирован.


2

Если вы создаете веб-сайт в Visual Studio 2010. Вы можете изменить имя проекта следующим образом.

Шаг 1. В Visual Studio 2010 файл SLN будет храниться в папке проекта в Visual Studio 2010, а исходные файлы хранятся в папке «Веб-сайт» в Visual Studio 2010.

Шаг 2: Переименуйте папку, щелкнув правой кнопкой мыши на этой папке, переименуйте ее, которая содержит ваш проект SLN.

Шаг 3: Переименуйте имя файла SLN, щелкнув правой кнопкой мыши на этом файле SLN, переименуйте.

Шаг 4. Переименуйте папку, содержащую источник этого файла SLN, в разделе «Веб-сайт» в Visual Studio 2010.

Шаг 5: Затем, наконец, дважды щелкните файл SLN и измените корневой каталог вашей исходной папки SLN.


2

Единственное решение, которое работает для меня на Visual Studio 2013 в веб-проекте:

Допустим, я хочу переименовать «project1» в «project2». Допустим, физический путь к моему файлу .sln: c: \ my \ path \ project1 \ project1.sln

поэтому путь к моему файлу .csproj, а также к папкам bin и obj должен быть: c: \ my \ path \ project1 \ project1 \

  1. Откройте решение в VS, дважды щелкнув файл project1.sln.

  2. В обозревателе решений щелкните правой кнопкой мыши проект (НЕ решение !!!), выберите «Переименовать» и введите новое имя.

  3. В обозревателе решений щелкните правой кнопкой мыши проект и выберите «Свойства». На вкладке «Приложение» измените «Имя сборки» и «Пространство имен по умолчанию».

  4. В главном файле CS (или в любом другом кодовом файле, например, Global.asax) переименуйте объявление пространства имен, чтобы использовать новое имя. Для этого щелкните правой кнопкой мыши пространство имен и выберите Refactor> Rename, введите новое имя. Например:

namespace project1

4.1 В обозревателе решений щелкните правой кнопкой мыши проект (НЕ решение !!!), выберите «Переименовать» и введите новое имя.

  1. Убедитесь, что для AssemblyTitle и AssemblyProduct в Properties / AssemblyInfo.cs задано новое имя («project2»).

1 [Assembly: AssemblyTitle ("Новое имя здесь")] 2 [Assembly: AssemblyDescription ("")] 3 [Assembly: AssemblyConfiguration ("")] 4 [Assembly: AssemblyCompany ("")] 5 [Assembly: AssemblyProduct (" Новое имя здесь ")] 6 [Assembly: AssemblyCopyright (" Copyright © 2013 ")] 7 [Assembly: AssemblyTrademark (" ")] 8 [Assembly: AssemblyCulture (" ")]

  1. Закройте Visual Studio.

  2. Удалить каталоги bin и obj физически.

  3. Переименуйте родительскую папку и исходную папку в новое имя (project2):

В примере: c: \ my \ path \ project1 \ project1

будет: c: \ my \ path \ project2 \ project2

  1. Переименуйте имя файла SLN, щелкнув правой кнопкой мыши на этом файле SLN, переименуйте.

  2. Затем, наконец, откройте файл SLN (в блокноте или любом редакторе) и скопируйте и замените (Ctrl + h) любое старое имя на новое.

  3. Откройте VS и нажмите BUILD -> Clean Solution

  4. нажмите Build -> Build Solution и затем F5 для запуска ...

  5. Примечание 1: Если вы получаете что-то вроде этого: Ошибка компиляции CS0246: Не удалось найти тип или имя пространства имен 'project2' (отсутствует директива using или ссылка на сборку?)

Исходный файл: c: \ Users \ Имя пользователя \ AppData \ Local \ Temp \ Временные файлы ASP.NET \ root \ 78dd917f \ d0836ce4 \ App_Web_index.cshtml.a8d08dba.b0mwjmih.0.cs

Затем перейдите в папку «Temporary ASP.NET Files» и удалите все.

  1. Примечание 2: Если вы пытаетесь сделать «сохранить как» для нового именованного проекта и сохранить также старый, подумайте о дублировании вашей базы данных, изменив connectionStrings в web.config, а также перезапустив миграции, если у вас есть один в проект.

2

Я новичок в VS. У меня была та же проблема: мне нужно было переименовать запущенный проект после пары недель работы. Это то, что я сделал, и это сработало.

  1. На всякий случай сделайте резервную копию вашей папки Project, хотя вы не будете к ней прикасаться, но на всякий случай!
  2. Создайте новый проект и сохраните его, используя имя, которое вы хотите для своего «нового» проекта, то есть имя, на которое вы хотите изменить свой «старый» проект.
  3. Построить это. После этого у вас будет проект с именем, которое вы хотели, но он ничего не делает, а только открывает окно (в моем случае это приложение Windows Form).
  4. Открыв новый проект, нажмите Project-> Add Existing Ítem и с помощью проводника Windows найдите вашу «старую» папку Project и выберите все файлы в ... Visual Studio xxx \ Projects \ oldApp \ oldApp
  5. Выберите все файлы (.vb, .resx) и добавьте их в свой «новый» проект (тот, который должен быть уже открыт).
  6. Почти последним шагом было бы открыть файл проекта с помощью
    обозревателя решений и на 1-й вкладке изменить форму запуска по умолчанию на форму, которой она должна быть.
  7. Перестрой все.

Может быть, больше шагов, но меньше или вообще не печатать, просто несколько щелчков мышью. Надеюсь, поможет :)




Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.