How do I move a project to a different folder in Visual Studio? I am used to this structure in my projects.
-- app
---- Project.Something
---- Project.Someth
Summary: rename-and-move in VS2019 with git, retaining git history, leveraging R# a bit, automatic dependent project reference updating (important for sln's with many projects, we have >200)
I have been using the following steps to rename-and-move C# projects in Visual Studio 2019. This process uses R# to adjust namespaces. The git history is retained by doing a "git mv" (avoiding add/delete history drop).
Two phases: 1) rename the project in place and 2) move the project.
(Uses tip from base2 re unloading projects.)
Rename
Note: The folder in Windows Explorer remains the old name to this point (e.g., Utils.Foo). This is fixed in the move steps.
Move
This method: 1) retains git history, 2) leverages R# to adjust namespaces atomically and 3) updates dependent projects en masse (avoids tedious manual editing of dependent sln and csproj files).
unload all the projects in the solution (so that removal of the target project does not trigger changes in dependent projects)
VS | select all solution folders under the Solution | right-click Unload Projects
move folders using git (so history is maintained)
a) open Developer Command Prompt for 2019
b) git status (to illustrate “nothing to commit, working tree clean”)
c) git mv the project e.g., git mv "C:\Code\foo\foo\Utils.Foo" "C:\Code\Foo"
d) git status to view/verify change
VS | Solution Explorer | select project | right-click | Remove (since all projects are unloaded, this will correctly NOT remove the references to it in dependent projects)
a) VS | Solution Explorer | select target parent folder | right-click | Add | Existing Project
IMPORTANT: Confirm that *.csproj files for dependent projects have been updated.
(VS | Team Explorer | Changes | double-click any dependent csproj listed | inspect-verify ProjectReference path change)
Use Notepad++ (or other text editor) to fix the paths. Often this can be done with a simple search-and-replace (e.g., ../../../../ to ../../).
This will update...
a) GlobalAssmeblyInfo.cs references
b) paths to packages
c) paths to Dependency Validation diagram files
d) paths to ruleset paths (e.g., )
Save All, Close Solution, I prefer to delete bin and obj folders to be clean of history, Re-open Solution
a) VS | Team Explorer | Changes
i) should see Staged Changes that reveal the files that moved ii) should see dependent projects (*.csproj) that were nicely updated review the csproj diffs and notice that the paths have been beautifully updated!! (this is the magic that avoids laboriously manually updating the csproj files using a text editor)
b) in Windows Explorer, verify old location is empty
c) Clean Solution, Rebuild Solution, Run unit tests, Launch apps in sln.