Перемещение файлов проектов в .NET проекте - PullRequest
8 голосов
/ 19 июля 2010

Это не связано с кодом, но связано с IDE. Я работаю над решением .NET с 35 различными проектами. Эти проекты должны быть реорганизованы в новую структуру папок. Зачем? Потому что около 10 из них будут удалены, а остальные будут разделены на более логические единицы. Один из способов сделать это - создать новое решение, перетащить проекты в новое дерево папок в проводнике Windows, а затем просто добавить их в новое решение. Если честно, это звучит глупо!

Есть ли способ просто переместить проекты в разные папки из среды IDE? Я пытался "сохранить как" проекты, но среда IDE не принимает другую папку.

Это раздражает, но из-за того, что в именах папок было несколько неправильных вариантов, теперь я застрял с этими именами. <ч /> Пример: прямо сейчас у меня есть главная папка проекта, которая содержит дочерние папки с именами «Клиент», «Сервер», «Бизнес», «База данных» и все, что угодно. В этих дочерних папках есть еще дочерние папки, каждая из которых состоит из трех цифр. В каждой пронумерованной папке есть проект, который назван некоторым логическим способом, например Company.Business.Customers с дополнительной логикой в ​​этом проекте. Проблема в том, что не все проекты в настоящее время следуют этому соглашению об именах, и я считаю его устаревшим. Такой проект, как Company.Business.Customers, должен находиться в папке с именем Company.Business.Customers в корневом каталоге проекта, чтобы его было легче распознать. Название уже дает понять, что это бизнес-класс для этого проекта. Четкое разделение на клиентские классы, бизнес-классы и все остальное просто необходимо организовать в рамках решения, но я хочу сгладить структуру файлов. (И удалите некоторые устаревшие проекты.) По сути, я не рефакторинг, я просто убираю. VS2008, похоже, не имеет такой возможности, хотя ...

Ответы [ 5 ]

6 голосов
/ 19 июля 2010

Запустите notepad.exe и откройте файл .sln.И запустите Windows Explorer, перейдите в каталог решений.Обратите внимание, как содержимое файла .sln соответствует структуре решения.Отредактируйте записи, внесите соответствующие изменения с помощью Explorer.Сначала сделайте резервную копию.

1 голос
/ 19 июля 2010

Я не думаю, что есть какой-либо способ сделать это из Visual Studio, и, как указывает @gmagana, это будет очень трудно сделать, если файлы находятся под контролем версий.

Однако этоМожно сделать это вручную.

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

Теперь запустите Visual Studio и создайте новый пустой проект.Если у вас есть разные типы проектов, вы можете создать один новый пустой проект для каждого типа.В результате у вас останется пустой файл .csproj и файл .sln только с одним проектом.

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

Наконец, отредактируйте файл .sln и удалите раздел Project.,Скопируйте пустой файл .sln туда, куда вы хотите, и откройте его в Visual Studio.Теперь перейдите и добавьте каждый из существующих проектов в новое решение.

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

Как только вы получите новое решение для сборки, будет полезно открыть библиотеки DLL в Reflector, чтобы убедиться, что вы не пропустили ни одного объявления пространства имен в файле кода - если выПытаясь добраться до точки, где между библиотекой DLL и пространством имен имеется соответствие 1-1, или даже гарантировать, что пространства имен не разделены между библиотеками DLL, Reflector - ваш друг.

Удачи.

1 голос
/ 19 июля 2010

Кроме того, ОЧЕНЬ опасайтесь делать это в сочетании с системами контроля версий.Вы должны очень хорошо знать свою систему контроля версий, чтобы знать, как она отреагирует на такой серьезный рефакторинг.

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

Я бы сделал резервную копию,а затем рефакторинг прочь.Я думаю, что ошибочно думать, что вы можете делать все, что вам нужно, из IDE.И если вы делаете то, что вы описываете, из IDE в системе управления версиями, которая использует старый API-интерфейс Visual SourceSafe, вы наверняка (гарантированно) испортите свои привязки, этот API просто не предназначен для перемещения (или переименования)файлы вокруг так, как вы описываете.Лучший способ сделать это в этом сценарии - удалить все привязки управления исходным кодом, а затем повторно добавить реорганизованное решение обратно.

Это не так сложно, вам просто нужно подготовить (сделать резервную копию) и поэкспериментироватьпока не поймешь правильно.

1 голос
/ 19 июля 2010

Я не думаю, что здесь есть простой ответ.Ваша основная проблема заключается в том, что Visual Studio (или .NET) не волнует, есть ли у вас классы, принадлежащие другому корневому пространству имен, находящемуся в проекте.

То есть, если у вас есть проект с именем Project.BusinessObjects и другой проект Project.DataObjects ничто не мешает вам поместить класс Project.BusinessObjects.User в проект Project.DataObjects.

Я не знаю ни одного способа сделать все это безмного ручной работы.Resharper очень поможет, если вы воспользуетесь функцией «переименование пространства имен», но у вас все равно будет много работы.

0 голосов
/ 27 июля 2010

Я использовал следующее решение для решения моей проблемы:

  1. Я начал с нового пустого решения в новой папке.
  2. Для каждого проекта, который нужно было переместить, я использовал проводник Windows для создания дочерней папки в папке решения, на этот раз с правильным именем.
  3. Я скопировал проекты из их исходного местоположения в их новые папки.
  4. Я добавил все (перемещенные) существующие проекты из их новых местоположений.
  5. В диспетчере решений я переименовал проекты в лучшее название.
  6. Я исправил свойства проекта и другие настройки для всех проектов.

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

...