Visual Studio переместить проект в другую папку


182

Как переместить проект в другую папку в Visual Studio? Я привык к этой структуре в моих проектах.

-- app
---- Project.Something
---- Project.SomethingElse

Я хочу переименовать все пространство имен SomethingElse в SomethingNew, как лучше всего это сделать (не заходя вручную в файл .sln)?


Используете ли вы TFS в качестве поставщика управления исходным кодом?
Бермо

Вы хотите переименовать только папку или весь проект?
Чарльз Гарджент

Проект, папка и пространство имен.
Егор Павлихин

Ответы:


175

Удалите проект из решения, щелкнув его правой кнопкой мыши в окне обозревателя решений и выбрав «Удалить». Переместите всю папку проекта, включая подкаталоги, куда вы хотите. Добавьте проект обратно в ваше решение.

Имена пространства имен - это нечто совершенно другое, просто отредактируйте исходный код.


6
Это то, что я сделал, но я подумал, что есть способ сделать все это, не удаляя весь проект, что заставляет меня заново добавлять все зависимости.
Егор Павлихин

31
Перед удалением проекта, который вы хотите переместить, выгрузите все зависимые проекты из решения. Таким образом, они не обнаруживают удаление, а ссылки на проекты остаются неизменными. После перемещения проекта и повторного добавления его в решение вы можете снова загрузить зависимые проекты.
base2

13
Не забывайте, что удаление файла в TFS, а затем его повторный импорт в TFS в другом каталоге или проекте приводит к удалению истории изменений файла.
Пол

Я хочу сделать это без потери истории изменений, поэтому я могу делать сравнения, когда захочу.
user734028

197

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

Я использую этот подход:

  1. Переместите папку проекта.
    • Если проект находится в управлении исходным кодом, выполните перемещение с помощью команд управления исходным кодом.
  2. Отредактируйте файл решения в текстовом редакторе. Там должен быть только один путь, который вам нужно изменить.

Определенно проще! Но после того, как я переместил и отредактировал решение, используя текстовое редактирование, файл решения показывается внизу как обычный текстовый файл. Как мне избавиться от этого?
Абриэль

2
«Если проект находится в управлении исходным кодом, выполните перемещение с помощью команд управления исходным кодом». .. Можете ли вы объяснить, как это сделать?
Аниш V

3
@AnishV Например, если вы используете Git, введите git mv ...вместо mv .... Смотрите git-mvдокументацию для получения дополнительной информации.
cubuspl42

3
В файле .csproj необходимо обновить свойство SolutionDir, а также исправить все пути для ссылок на проекты и расположения пакетов nuget. В файле .sln все, что вам нужно сделать, это обновить путь к проекту.
Пит

Это сработало для меня. Единственным «трюком» было то, что мне пришлось изменить файл .sln, чтобы редактировать его было не только для чтения, а затем снова пометить его как «только для чтения» в целях безопасности.
JustWannaFly

44
  1. Закройте свое решение в VS2012
  2. Переместите свой проект на новое место
  3. Откройте ваше решение
  4. Выберите проект, который не удалось загрузить
  5. В окне инструмента Свойства есть редактируемая запись «Путь к файлу», которая позволяет вам выбрать новое местоположение проекта
  6. Установите новый путь
  7. Щелкните правой кнопкой мыши по проекту и нажмите перезагрузить

4
Это работает очень хорошо и, казалось бы, самый быстрый и простой способ, несмотря на другие гораздо более высокие ответы. Здесь есть статья: msmvps.com/blogs/deborahk/archive/2010/06/30/…
Майк Розенблюм,

@MikeRosenblum Ссылка не работает, новая ссылка - blogs.msmvps.com/deborahk/…
Рой Гавиш

1
Не работает в VS2012. В связанной статье также упоминается только VS2010.
басим

В VS2010 у меня все работало нормально, включая все мои ссылки, кроме 1, который мне пришлось добавить заново.
Кристиан

@Vasanth В Visual Studio 2019 вам нужно вручную отредактировать файл .sln, чтобы найти проект; и, возможно (вероятно) файл .csproj, чтобы ссылаться на правильное расположение любых пакетов nuget.
Caltor

3

То, что работало для меня, было:

  1. Удалить проект из решения.
  2. Отредактируйте файл проекта с помощью текстового редактора.
  3. Обновите все относительные пути к «пакетам». В моем случае мне пришлось перейти ..\packagesна ..\..\..\packagesтак как я переместил проект в более глубокую папку.
  4. Загрузите проект обратно в решение.

2

У меня такая же проблема. Я решил переместить ссылки и менее чем за 15 минут, без изменения ссылок.

Для меня решение было простым:

  1. Переместите свои файлы туда, где вам нужно.
  2. Удалите папку с именем .vs. Должна быть как невидимая папка.
  3. Откройте файл решения (.sln) с помощью простого редактора, такого как note или notepad ++.
  4. Измените ссылку, где находится ваш файл, используя следующую структуру: если вы поместили свой проект в ту же папку, удалите предыдущую папку или ссылку ".. \"; если вы положили в вышеупомянутую папку, добавьте ссылку ".. \" или название папки.
  5. Сохраните файл с изменениями.
  6. Откройте файл проекта (.csproj) и сделайте то же самое, удалите или добавьте ссылку.
  7. Сохраните изменения.
  8. Откройте файл решения.

Примеры:

В файле решения (.sln)

  • Оригинал: Project ("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PATH1.UI", " ScannerPDF \ PATH1.UI \ PATH1.UI.csproj", "{A26438AD-E428-4AE4-8AB8-A5D6933E2D7 } "Project (" {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} ") =" PATH1.DataService "," ScannerPDF \ PATH1.DataService \ PATH1.DataService.csproj "," {ED5A561B-3674-46132-ADE5-B6466-RU115-B116-RU115-RUE5 }»

    Новый: Project ("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PATH1.MX.UI", "PATH1.MX.UI \ PATH1.UI.csproj", "{A26438AD-E428-4AE4-8AB8 -A5D6933E2D7B} "Проект (" {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} ") =" PATH1.DataService "," PATH1.DataService \ PATH1.DataService.csproj "," {ED5A561B-3674E13B-3674-136-RU-3674-13 }»

В файле проекта:

  • Оригинал:

    Новое:

    Оригинальная ссылка: .... \ lib \ RCWF \ 2018.1.220.40 \ TelerikCommon.dll

    Новая ссылка: .. \ lib \ RCWF \ 2018.1.220.40 \ TelerikCommon.dll


2

Описание: переименование и перемещение в VS2019 с использованием git, сохранение истории git, использование R # немного, автоматическое обновление зависимых ссылок на проекты (важно для sln со многими проектами, у нас> 200)

Я использовал следующие шаги для переименования и перемещения проектов C # в Visual Studio 2019. Этот процесс использует R # для настройки пространств имен. История git сохраняется путем выполнения git mv (избегая удаления / удаления истории).

Два этапа: 1) переименовать проект на месте и 2) переместить проект.

(Использует подсказку от base2 по разгрузке проектов.)

Rename

  1. VS | Обозреватель решений | щелкните правой кнопкой мыши проект | Переименуйте (например, Utils.Foo в Foo).
  2. VS | Обозреватель решений | щелкните правой кнопкой мыши проект | Свойства | изменить имя сборки, пространство имен по умолчанию и поля информации о сборке
  3. Выполните 1 и 2 для соответствующего тестового проекта (например, Utils.Foo.Tests)
  4. VS | Обозреватель решений | проекты правой кнопкой мыши (производство и тестирование) | Рефакторинг | Настройте пространства имен
  5. Возможно, потребуется обновить файлы XAML, которые используют проект (вручную или с помощью соответствующего глобального поиска и замены).
  6. Восстановить все
  7. Фиксировать !! (совершать изменения до ходов)

Примечание. Папка в проводнике Windows до сих пор остается старым именем (например, Utils.Foo). Это исправлено в шагах переезда.

Шаг

Этот метод: 1) сохраняет историю мерзавцев, 2) использует R # для атомарной настройки пространств имен и 3) массово обновляет зависимые проекты (избегает утомительного ручного редактирования зависимых файлов sln и csproj).

  1. выгрузить все проекты в решении (чтобы удаление целевого проекта не приводило к изменениям в зависимых проектах)

    VS | выберите все папки решений под Решением | щелкните правой кнопкой мыши по разгрузке проектов

  2. перемещать папки с помощью git (чтобы история сохранялась)

а) открыть командную строку разработчика на 2019 год

б) git status (чтобы проиллюстрировать «нечего коммитить, чистое дерево работы»)

c) git mv проекта, например, git mv "C: \ Code \ foo \ foo \ Utils.Foo" "C: \ Code \ Foo"

d) статус git для просмотра / проверки изменений

  1. удалить проект

VS | Обозреватель решений | выбрать проект | щелкните правой кнопкой мыши | Удалить (так как все проекты выгружены, это правильно НЕ удалит ссылки на него в зависимых проектах)

  1. повторно добавить проект (в новое место в дереве в обозревателе решений)

а) VS | Обозреватель решений | выберите целевую родительскую папку | щелкните правой кнопкой мыши | Добавить | Существующий проект

  1. перезагрузить все проекты

ВАЖНО: Убедитесь, что файлы * .csproj для зависимых проектов были обновлены.

(VS | Team Explorer | Изменения | дважды щелкните любой зависимый csproj в списке | inspect-verify изменение пути ProjectReference)

  1. Исправьте пути вручную в одном перемещенном файле * .csproj

Используйте Notepad ++ (или другой текстовый редактор), чтобы исправить пути. Часто это можно сделать с помощью простого поиска и замены (например, ../../../../ to ../../).

Это обновит ...

а) ссылки GlobalAssmeblyInfo.cs

б) пути к пакетам

c) пути к файлам диаграмм проверки зависимостей

d) пути к путям набора правил (например, <CodeAnalysisRuleSet>..\..\..\..\SolutionDependencyValidation\IgnoreWarnings.ruleset</CodeAnalysisRuleSet>)

  1. Закройте и снова откройте решение (чтобы привести ссылки на проект в хорошую форму)

Сохранить все, закрыть решение, я предпочитаю удалять папки bin и obj, чтобы очистить историю, заново открыть решение

  1. Validate

а) VS | Team Explorer | изменения

я) должен увидеть поэтапные изменения, которые показывают файлы, которые были перемещены; ii) должен увидеть зависимые проекты (* .csproj), которые были приятно обновлены, просмотреть изменения в csproj и заметить, что пути были красиво обновлены !! (это магия, которая позволяет избежать кропотливого ручного обновления файлов csproj с помощью текстового редактора)

б) в проводнике Windows убедитесь, что старое местоположение пусто

c) Чистое решение, восстановление решения, запуск модульных тестов, запуск приложений в sln.

  1. Фиксировать !!

1

Это легко в VS2012; просто используйте функцию сопоставления изменений:

  1. Создайте папку, в которую вы хотите переместить решение.
  2. Проверьте все свои файлы проекта (если вы хотите сохранить изменения) или откатите все извлеченные файлы.
  3. Закройте решение.
  4. Откройте Проводник управления источниками.
  5. Щелкните правой кнопкой мыши решение и выберите «Дополнительно -> Удалить сопоставление ...»
  6. Измените значение «Локальная папка» на значение, которое вы создали на шаге 1.
  7. Выберите «Изменить».
  8. Откройте решение, дважды щелкнув его в проводнике контроля версий.

2
То есть, если вы используете TFS?
Мартин Ба,

1

В Visual Studio Comunity 2019 я сделал то, что сказал Виктор Дэвид Франсиско Энрике, но мне нужно было только удалить папку .vs invisbile


0

В VS 2015

  1. Выгрузите ваш проект в обозревателе решений
  2. Создать новое решение
  3. Скопируйте проекты в папку нового решения
  4. Щелкните правой кнопкой мыши решение, добавьте существующий проект.
  5. Если вы используете какой-то фреймворк, например MVC, вам может понадобиться добавить ссылку в менеджер ссылок.

0

Я понял эту попытку, это сработало для меня.

В Visual Studio 2017 Community Edition он создает проект по этому пути "C: \ Users \ mark \ source \ repos \ mipmaps \ mipmaps". Это создаст доступ к файлу, в котором отказано в выдаче.

Теперь вы можете это исправить.

закройте ваш визуальный студийный процесс. Затем найдите свой проект и скопируйте папку проекта. Но сначала создайте подпапку «Именованные проекты» в вашей папке visual studio 2017 в документах. Затем вставьте папку проекта в папку проекта Visual Studio 2017, а не в основную папку Visual Studio 2017, она должна находиться в подпапке «Проекты». Затем перезапустите Visual studio 2017 Затем выберите Open project Solution Затем найдите свой проект, который вы вставили, в папку Projects Visual Studio 2017 Затем очистите проект и перестройте его. Он должен хорошо скомпилироваться и скомпилироваться. Надеюсь, это помогло кому-нибудь еще. Не совсем понятно, почему Microsoft думала, что создание ваших проектов по пути, для которого нужны разрешения на запись, мне не подходит.


0

Я хотел, чтобы изменения в Git отображались как перемещения / переименования, а не как удаление и добавление. Итак, я сделал комбо из вышеперечисленного и этот пост .

mkdir subdirectory
git mv -k ./* ./subdirectory
# check to make sure everything moved (see below)
git commit

И отрегулируйте пути к проектам и сборкам из пакета nuget в файле sln с помощью текстового редактора.


0
  1. Скопируйте папку проекта в новое место назначения
  2. Удалить проект из решения (щелкните правой кнопкой мыши проект в «Обозревателе решений» и выберите «Удалить»)
  3. Затем добавьте существующий проект в решение (щелкните правой кнопкой мыши проект в «Обозревателе решений» и выберите «Добавить», затем «Существующий проект»).
  4. Измените путь к папке «packages» в файле «YourProjectName.csproj» (откройте в блокноте и измените пути для связанных пакетов)

0

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


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