Zmiana nazw projektów, namespace, lokalizacji w Visual Studio 2010

07.04.2012

W Visual Studio 2010 MainSolution.sln posiadam projekty nazwane odpowiednio Foo.Bar1, Foo.Bar2.:

image

Struktura katalogów projektu wygląda następująco:

image

Projekt jest pod kontrolą systemu kontroli wersji Mercurial. Co chcę zrobić? Chcę zmienić nazwę projektów znajdujących się wewnątrz na odpowiednio Project1 i Project2, a co za tym idzie namespace w każdym pliku projektu i dodatkowo strukturę katalogów, tak żeby odpowiadała nowej nazwie projektów (zamiast vs-rename/src/app/Foo.Bar1 ma być vs-rename/src/app/Project1 itd). Po tej zmianie kod musi się kompilować bez problemy i nie może być problemów z commitem/pushem do zdalnego repozytorium na serwerze.

Rozwiązanie

Wykonuję następujące kroki:

1. Zmieniam nazwy poszczególnych projektów (F2 na projekcie).

2. Zmieniam nazwy namespace w Visual Studio 2010 (F2 na namespace) lub przy użyciu Resharpera (Ctrl+R+R na nazwie namespace). Jeżeli Resharper nie chce pokazać dialogu zmiany namespace spróbuj przestawić kursor na kolejny człon namespace (po kropce, jeżeli namespace projektu posiada kropki).  Czyli zamiast ustawić kursor na Foo, ustawiam gdzieś w “Bar1”. U mnie czasami ten skrót nie działa na pierwszym członie projektu (R# 6.1). Nie wiem z jakiego powodu. Wystarczy wykonać tą operację w pojedynczym pliku w każdym projekcie, aby reszta plików została automatycznie uaktualniona.

3. Zmieniam nazwę standardowego namespace (i ewentualnie nazwy assembly) w każdym z projektów (w opcjach projektu “Default namespace” w zakładce “Application”). Wyłączam Visual Studio 2010.

4. Wywołuję komendę hg rename –R “ścieżka do /vs-rename/src/app” –v Foo.Bar1 Project1 i analogiczną dla Foo.Bar2/Project2 lub “Rename File…”  jeżeli korzystam z TortoiseHg.

5. Otwieram w notatniku kolejno pliki MainSolution.sln, Project1.csproj i Project2.csproj i zmianiem wszystkie wystąpienia (Ctrl+H) Foo.Bar1/Foo.Bar2 na Project1/Project2. Zmiany w plikach *.csproj wprowadzam tylko wtedy, jeżeli projekty posiadają odwołania do innych projektów, w których zmieniana była nazwa.

Po tych zabiegach otwieram projekt w Visual Studio 2010. Wszystkie projekty wewnątrz powinny załadować i skompilować się bez problemu. Zostaje juz tylko commit/push na serwer Mercuriala.