diff --git a/src/CodingWithCalvin.ProjectRenamifier/Commands/RenamifyProjectCommand.cs b/src/CodingWithCalvin.ProjectRenamifier/Commands/RenamifyProjectCommand.cs index e0ed85e..3847491 100644 --- a/src/CodingWithCalvin.ProjectRenamifier/Commands/RenamifyProjectCommand.cs +++ b/src/CodingWithCalvin.ProjectRenamifier/Commands/RenamifyProjectCommand.cs @@ -86,8 +86,14 @@ private void RenameProject(Project project, DTE2 dte) // Update namespace declarations in source files SourceFileService.UpdateNamespacesInProject(projectFilePath, currentName, newName); + // Rename the project file on disk + projectFilePath = ProjectFileService.RenameProjectFile(projectFilePath, newName); + // TODO: Implement remaining rename operations // See open issues for requirements: + // - #21: Rename parent directory if it matches project name + // - #22: Remove and re-add project to solution + // - #23: Update project references // - #9: Update using statements across solution // - #11: Solution folder support // - #12: Progress indication diff --git a/src/CodingWithCalvin.ProjectRenamifier/Services/ProjectFileService.cs b/src/CodingWithCalvin.ProjectRenamifier/Services/ProjectFileService.cs index 0d909c3..8714e5d 100644 --- a/src/CodingWithCalvin.ProjectRenamifier/Services/ProjectFileService.cs +++ b/src/CodingWithCalvin.ProjectRenamifier/Services/ProjectFileService.cs @@ -1,3 +1,4 @@ +using System.IO; using System.Xml; namespace CodingWithCalvin.ProjectRenamifier.Services @@ -7,6 +8,24 @@ namespace CodingWithCalvin.ProjectRenamifier.Services /// internal static class ProjectFileService { + /// + /// Renames the project file on disk. + /// + /// Full path to the current .csproj file. + /// The new project name (without extension). + /// The new full path to the renamed project file. + public static string RenameProjectFile(string projectFilePath, string newName) + { + var directory = Path.GetDirectoryName(projectFilePath); + var extension = Path.GetExtension(projectFilePath); + var newFileName = newName + extension; + var newFilePath = Path.Combine(directory, newFileName); + + File.Move(projectFilePath, newFilePath); + + return newFilePath; + } + /// /// Updates the RootNamespace and AssemblyName elements in a project file /// if they match the old project name.