如何从Visual Studio中重命名项目文件夹?

我目前重命名项目文件夹的解决方案是:

  • 从解决方案中删除项目。
  • 重命名Visual Studio之外的文件夹。
  • 将项目重新添加到解决方案中。

有没有更好的办法?

657384 次浏览

实际上,您可以单击损坏的项目节点并在属性窗格中查找属性“Path”,单击小型浏览图标,然后选择新路径。

瞧:)

还有另一种方法,使用*. sol,*csproj文件。

  1. 打开您的解决方案文件。
  2. 搜索您想要更改的*. csproj。
  3. 它会像这样(相对于*. sol文件):

    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shani.Commands.Impl", "Shani.Commands.Impl\Shani.Commands.Impl.csproj", "{747CFA4B-FC83-419A-858E-5E2DE2B948EE}"

  4. 只需将第一部分更改为新的diretory,例如:

    Impl\Shani.Commands.Impl\Shani.Commands.Impl.csproj

  5. 当然,不要忘记将整个项目移动到该目录。

TFS用户:如果您使用的源代码控制要求您在重命名文件/文件夹之前警告它,那么请查看改为这个答案,其中涵盖了所需的额外步骤。


在Visual Studio中重命名项目的文件夹文件.*proj)和显示名称

  • 关闭解决方案。
  • 重命名Visual Studio之外的文件夹。(如果使用源代码控制,请在TFS中重命名)
  • 打开解决方案,忽略警告(如果要求从源代码控制加载项目,请回答“否”)。
  • 浏览所有不可项目并…
    • 打开项目的属性窗口(突出显示项目并按Alt+输入F4,或右键单击>属性)。
    • 将属性文件路径设置为新位置。
      • 如果该属性不可编辑(如在Visual Studio 2012中),则直接在另一个编辑器(如记事本++)中打开.sln文件并更新那里的路径。(您可能需要先在TFS等中签出解决方案)
    • 重新加载项目-右键单击>重新加载项目。
    • 通过突出显示并按F2或右键单击>重命名来更改项目的显示名称。

备注:其他建议的解决方案涉及删除项目然后将项目重新添加到解决方案中,这将破坏项目引用。

如果您执行这些步骤,那么您还可以考虑重命名以下内容以匹配:

  1. 大会
  2. 默认/根命名空间
  3. 现有文件的命名空间(使用Visual Studio中的重构工具或ReSharper的不一致的命名空间工具)

还要考虑修改以下程序集属性的值:

  1. AssemblyProductAttribute
  2. AssemblyDescriptionAttribute
  3. AssemblyTitleAttribute

说明:此修复程序适用于Visual Studio 2008,但它应该可以在此处工作。

  1. 使用Windows资源管理器,将解决方案文件夹(父文件夹和子文件夹)重命名为新的解决方案名称。
  2. 删除位于父文件夹中的.sln文件。
  3. 在Visual Studio中,选择菜单文件打开项目
  4. 钻取刚刚重命名的新文件夹并打开. csproj文件(位于子文件夹中)。
  5. 右键单击项目名称并将其重命名为您想要的名称。(它应该与步骤1中的文件夹同名。)
  6. 选择菜单文件关闭解决方案。一个对话框将询问您是否要保存对.sln文件的更改。单击
  7. 将文件另存为对话框中,指向新重命名的父母文件夹,然后单击保存。(注意:确保.sln文件与文件夹同名。这不是必需的,但它保持了一致性。)

成交

Andersjanmyr的回答中,首先重命名项目更容易。

  1. 重命名项目。
  2. 关闭解决方案(保存它)。
  3. 重命名Visual Studio之外的文件夹。
  4. 打开解决方案,忽略警告。
  5. 浏览所有不可用的项目并将属性“File Path”设置为项目文件的新位置,即someproject.csproj
  6. 重新加载项目。

此外,执行这些步骤后,您可能希望将其他引用重命名为旧项目名称。

在项目属性中,更新程序集名称和默认命名空间。

这将更新项目文件中的以下内容…

<RootNamespace>SomeProjectName</RootNamespace><AssemblyName>SomeProjectName</AssemblyName>

…并将摆脱错误“命名空间不对应于文件位置,应该是:'某些项目名称'”

重命名您的根命名空间(如果您有ReSharper右键单击命名空间并转到重构->重命名)。

更改AssemblyInfo.cs中旧项目名称的所有出现。

参见链接文章中的第3项


  1. 关闭解决方案和IDE。
  2. 在Windows资源管理器中:将目录名更改为新名称。
  3. 在Windows资源管理器中:使用文本编辑器打开. sln文件。
  4. 将目录名称更改为新名称并保存。
  5. 如果没有自动启动,请重新启动IDE并从菜单文件最近的文件菜单打开解决方案。
  6. 单击解决方案资源管理器中的项目文件夹并检查底部属性中的路径属性。它现在将引用新项目文件夹。

它为我工作。

我只需要自己做(使用Visual Studio 2010)。正如一些人回答的那样,最简单的步骤似乎是:

  1. 关闭Visual Studio项目。
  2. 打开. sln文件并为每个. csproj事件重命名项目目录前缀。
  3. 保存. sln文件
  4. 重命名硬盘上的实际项目文件夹目录以匹配. sln文件中的更改。
  5. 打开. sln(在Visual Studio中)并重建

我已经编写了一个小工具来自动执行所有这些步骤。它现在还支持Subversion

有关当前版本的信息可以在Visual Studio Project Renamer Infos中找到。

最新版本现在可以从Visual Studio Project Renamer下载页面下载。

非常感谢反馈。

使用TFS时,步骤2实际上是在源代码控制中重命名文件夹,然后在重新打开解决方案之前获取最新的文件夹。

更改文件夹名称后,打开记事本中的. sln文件并将路径更改为新路径。

伙计,我一直在努力解决这个问题。不幸的是,Visual Studio中没有一键式解决方案,但如果您正在运行Visual Studio 2012并且您的项目在Team Foundation Server的源代码控制下,以下是我如何让它工作,同时保留源代码历史记录:

(请务必阅读@mjv下面的评论,因为他指出您可以跳过步骤5-10)

  1. 确保您已签入所有更改,因此您没有挂起的更改。
  2. 通过右键单击并选择删除,从解决方案中删除项目。
  3. 现在,在Windows资源管理器中,重命名项目文件夹。
  4. 返回Visual Studio,在解决方案资源管理器中,右键单击解决方案并选择添加->现有项目。为您在步骤2中删除的项目选择项目文件,该文件应位于重命名的文件夹中。
  5. 现在该项目又回到了解决方案中,但该项目似乎没有添加到源代码控制中。要解决此问题,请使用开源控制资源管理器。
  6. 在源代码管理资源管理器中找到项目文件夹,该文件夹与您在步骤3中重命名的磁盘上的项目文件夹相对应。
  7. 在源代码管理资源管理器中重命名文件夹,使其与磁盘上的项目文件夹同名。
  8. 现在查看挂起的更改。您应该对解决方案文件进行更改,并对项目文件夹进行重命名操作。
  9. 重新构建并确保所有内容都正确编译。如果您对重命名的项目有项目间引用,则需要将它们再次添加到引用它的各个项目中。
  10. 你现在应该都准备好了。去检查一切。

上面的指南对我很有用。如果不适合你,请尝试完全删除本地解决方案,并删除工作区中的文件夹映射。以防万一,重新启动Visual Studio。确保你实际上从计算机中删除了整个解决方案。现在读取到工作区的解决方案映射并获取最新版本。现在尝试上述步骤。如果在遵循上述步骤时出现问题,同样适用。只需在本地删除解决方案并获取最新来源,你就可以重新开始工作了。

如果您仍然遇到问题,请确保您没有在解决方案文件中手动更改任何内容,或者在尝试上述步骤之前尝试其他“技巧”。如果您已经更改了某些内容并签入了它,您可能需要考虑回滚到开始处理项目重命名之前的点。

当然,您还想在解决方案资源管理器中重命名项目本身。您可以在上面的步骤之前执行此操作,但在这种情况下,请确保在应用上面的步骤之前检查该更改。您也可以在之后执行,但请确保首先遵循上面的所有步骤,并在尝试在解决方案资源管理器中重命名项目名称之前检查您的更改。我不建议尝试将上述步骤与解决方案资源管理器中项目名称的重命名混合在一起。虽然它可能有效,但我建议在两个单独的更改集中进行。

当必须创建新项目并且您想要与项目名称不同的项目文件夹名称时,会出现类似的问题。

当您创建一个新项目时,它会存储在

./path/to/pro/ject/YourProject/YourProject.**proj

假设您想将其直接放在ject文件夹中:

./path/to/pro/ject/YourProject.**proj

我的解决方法是使用路径的最后一部分作为其名称创建项目,这样它就不会创建额外的目录:

./path/to/pro/ject/ject.**proj

当您现在从Visual Studio中重命名项目时,您无需离开Visual Studio即可实现目标:

./path/to/pro/ject/YourProject.**proj

这种方法的缺点是您必须调整默认命名空间和Output二进制文件的名称,并且您必须更新项目模板中包含的所有文件中的命名空间。

我使用Visual Studio 2013和TFS 2013。

我是这样做的:

  1. 打开Visual Studio,无需打开解决方案本身,并使用源代码管理资源管理器查找和重命名项目的文件夹
  2. 双击源代码管理资源管理器中的解决方案文件以打开解决方案。
  3. 你得到一个问题:"最近已将项目添加到此解决方案中。是否要从源代码管理获取它们?",你选择
  4. 现在文件夹和项目结构在那里,但现在是文件,所以现在您可以从源代码控制获得最新版本
  5. 尝试构建和提交更改。

在Visual Studio 2013 Update 1中测试了一种更简单的方法,适用于与TFS连接的项目:

  • 打开Visual Studio,但关闭解决方案。
  • 打开源资源管理器并重命名所需的文件夹(如果您没有先关闭它,解决方案将为您关闭)。
  • 右键单击解决方案(也从源资源管理器开始)并选择签入。
  • 打开解决方案。您将被告知添加了新项目。接受以获取更改。
  • 从解决方案中删除项目并再次添加它,然后签入。
  • 检查内部引用是否正常。

我们最近上传了一个免费的Visual Studio扩展的测试版,它为您完成了这些工作。

查看Visual Studio Gallery:图库下载

我按我的方式做了

  • 关闭Visual Studio 2012
  • 将您的子目录重命名为. sln下的首选名称
  • 删除*. suo文件
  • 再次打开解决方案,并修复加载的Project的任何属性以满足新的子目录名称

用于商业智能数据工具的Visual Studio扩展的成熟解决方案(SSDT-BI 2013):

  1. 将Project文件夹移动到其新位置(不要重命名任何内容)
  2. 在解决方案资源管理器中,重命名项目/解决方案。
  3. 关闭(并保存)新重命名的项目。
  4. 重命名项目的文件夹和. sln文件。
  5. 使用文本编辑器并打开新重命名的项目解决方案文件(. sln)(我使用记事本++
  6. 在第6行中,您将看到:"Project{fdjfksdjk4387!…}="OLDPROJECT","OLDFOLDER\OLDPROJECT.rptproj"。使用步骤4中使用的新名称重命名所有内容。(即…="NEWPROJECT","NEWFOLDER\NEWPROJECT.rptproj"…)
  7. 就是它了!

它经过了100%的测试,在我的案例中完美地工作。

注意:我无法确认它是否适用于不同的项目模板和其他Visual Studio版本。一如既往,请事先备份所有内容。

最简单的方法是转到窗口的属性,更改默认命名空间的名称,然后完成重命名。

  1. 在Visual Studio之外重命名项目。
  2. 使用文本编辑器编辑your_project_name.sln,并将路径重命名为新路径。

这在Visual Studio 2015中很简单(可能适用于旧版本)

  1. 在解决方案资源管理器中,右键单击主要解决方案重命名
  2. 在解决方案资源管理器中,右键单击项目(在解决方案下)→重命名
  3. 在解决方案资源管理器中,双击或右键单击属性→goto应用选项卡,重命名程序集名称默认命名空间以匹配。
  4. 如果您还想重命名命名空间,请打开您的一个类文件。右键单击命名空间→重命名…。这应该会在整个项目中搜索并替换对您的命名空间的所有引用。
  5. 关闭项目→重命名项目文件夹
  6. 编辑记事本中的.sln文件,并将路径更改为csproj,即fu\bar.csprojbar\bar.csproj

更简单的解决方案如下:

  1. 右键单击项目并重命名它。
  2. (可选)打开项目的属性设置并修改程序集名称(以及可选的默认命名空间)以使用新项目名称。
  3. (可选)选择源文件中的命名空间名称,右键单击并选择重构/重命名以全局将命名空间重命名为新项目名称。
  4. (可选)打开AssemblyInfo.cs文件并将程序集名称更改为匹配。
  5. 保存并关闭解决方案。
  6. 使用Windows资源管理器,将项目文件夹重命名为新名称。
  7. 在文本编辑器中打开SLN文件并找到对项目路径的一个引用,然后将其更改为使用新文件夹名称。

有四个必要步骤,但建议执行七个。在一天结束时,尽管项目已完全重命名。从技术上讲,项目的文件夹名称不必与项目本身匹配,因此即使该步骤也是可选的,但如果它们不匹配,就会令人困惑。程序集和命名空间名称也是如此。

我做了以下事情:

<创建整个文件夹的备份>

  1. 从Visual Studio 2013中重命名项目(可选/不需要)。

  2. 将项目导出为模板。

  3. 关闭解决方案。

  4. 重新打开溶液

  5. 从保存的模板创建项目并使用您喜欢的名称。

  6. 从解决方案资源管理器中删除上一个项目。

此时,我尝试编译新解决方案,为此,我必须手动将一些资源和标头从旧项目文件夹复制到新项目文件夹。这样做直到它编译时没有错误。现在这个新项目保存了“.exe"文件到上一个文件夹。

所以->

  1. 转到Windows资源管理器并手动将解决方案文件从旧项目文件夹复制到新项目文件夹。

  2. 关闭解决方案,然后在新项目中打开解决方案。

  3. 如果需要,将配置更改回(x64)。

  4. 从解决方案的文件夹中删除具有旧名称的项目文件夹。

对于Visual Studio 2017,您可以使用我的Visual Studio扩展:

下载

它将重新命名该项目:

  • 项目位置文件夹
  • 解决方案文件
  • 在其他项目中的引用
  • 程序集名称、信息
  • 默认命名空间

我经常遇到在Visual Studio中重命名项目并编辑文件夹名称、项目名称和. sln文件以完成此任务的相同问题。我刚刚编写了一个VBScript脚本来完成所有这些。您必须小心选择用于替换的字符串。

您只需将. vbs文件与解决方案的. sln文件放在同一目录中。

' Script parameters'Solution = "Rename_Visual_Studio_Project" '.sln'Project = "Rename_Visual_Studio_Project" '.csproj'NewProject = "SUCCESS"
Const ForReading = 1Const ForWriting = 2
Set objFso = CreateObject("Scripting.FileSystemObject")scriptDirr = objFso.GetParentFolderName(wscript.ScriptFullName)
' Rename the all project references in the .sln file'Set objFile = objFso.OpenTextFile(scriptDirr + "\" + Solution + ".sln", ForReading)fileText = objFile.ReadAllnewFileText = Replace(fileText, Project, NewProject)Set objFile = objFSO.OpenTextFile(scriptDirr + "\" + Solution + ".sln", ForWriting)objFile.WriteLine(newFileText)objFile.Close
' Rename the .csproj file'objFso.MoveFile scriptDirr + "\" + Project + "\" + Project + ".csproj", scriptDirr + "\" + Project + "\" + NewProject + ".csproj"
' Rename the folder of the .csproj file'objFso.MoveFolder scriptDirr + "\" + Project, scriptDirr + "\" + NewProject

右键单击project→属性,并将(name)设置为所需的名称。

  1. 在解决方案和项目文件夹中重命名项目

  2. 从解决方案中删除项目

  3. 将现有项目添加到解决方案(重命名的项目)

这对我有效。TFS也将跟踪新项目。

在Visual Studio 2017中对我有用的东西:

  • Visual Studio中的关闭解决方案
  • 重命名解决方案中的项目目录。
    • (在源代码控制中推送更改-我的案例中是Git)
  • 在文本编辑器(Visual Studio 2017外部)中编辑. sln文件,更改目录的名称。
  • 在Visual Studio中重新打开解决方案

它说了一些类似“补全项目”的东西。我重建了一切,一切都很好。

对于那些使用Visual Studio+Git并希望保留文件历史记录的人(重命名项目和/或解决方案):

  1. 关闭Visual Studio

  2. 在. gitignore文件中,使用这些路径的重命名版本复制要重命名的项目的所有忽略路径。

  3. 像这样使用Git移动命令:

    git mv <old_folder_name> <new_folder_name>

    请参阅留档以获取其他选项:https://git-scm.com/docs/git-mv

  4. 在. sln文件中:找到定义项目的行并更改路径中的文件夹名称。该行应如下所示:

    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "<Project name>", "<path-to-project>\<project>.csproj"
  5. Open Visual Studio, and right click on project → Rename

  6. Afterwards, rename the namespaces.

    I read that ReSharper has some options for this. But simple find/replace did the job for me.

  7. Remove old .gitignore paths.

或者简单地复制所有代码,使用所需的名称打开一个新项目,然后粘贴代码。运行调试,然后删除上一个项目。完成!

它为我工作!

在文本编辑器中打开. sln,并在以下行中将更改为您的新文件夹名称项目("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ricky","\. csproj","{021CC6B0-8CFB-4194-A103-C19AF869D965}"

我不得不这样做很多次。能够重新利用现有项目,但能够重命名命名空间、文件和文件夹(包括文件/目录名称)中的文本,这真的很有用。

使用从根文件夹开始的递归查找和替换意味着重命名不会中断到解决方案文件和项目引用中项目的链接。

为此,我创建了一个项目来做到这一点。该应用程序还努力忽略版本控制文件夹,例如. git、. svn和. vs设置文件。更多信息在README中。

https://github.com/garethrbrown/vs-project-rename

示例

转到. sln文件,右键单击,使用Notepad++(或任何编辑器;Notepad++最快)打开,找到路径,更改它。

使用Visual Studio 2019,我按照以下步骤成功更改项目名称:

  1. 关闭溶液
  2. 重命名项目文件夹以匹配新项目名称
  3. 在记事本++类型的编辑器中打开解决方案文件并使用新项目名称文件夹编辑FilePath
  4. 打开解决方案,如果它询问您是否要从源代码控制打开,请单击否
  5. 右键单击要重命名的项目,然后单击属性,然后更改如下:更改组件名称,默认程序集命名空间和具有新名称
  6. 的程序集信息
  7. 打开任何文件并将文件移动到新的命名空间,这将由所有文件完成
  8. 如果你有app.config类型的文件然后确保移动他们也在新的命名空间
  9. 重建它,这将成功地工作

我刚刚为自己编写了一个全局dotnet工具(也考虑了git+历史记录)解决了这个问题。

安装dotnet tool install -g ModernRonin.ProjectRenamer,与renameproject <oldName> <newName>一起使用。

文档/修补/PR在

https://github.com/ModernRonin/ProjectRenamer

如果您的项目当前正在运行,则无法重命名文件夹

  1. 停止您的应用程序Shift+F5
  2. 从解决方案资源管理器重命名文件夹(right-click > renameF2

这在Visual Studio 2019中运行良好。

  1. 重命名解决方案,Visual Studio中的项目只需单个正常点击文件名。
  2. 在Visual Studio中重命名命名空间。
  3. 重命名主项目页面上所需的元素(发布位置、应用程序、默认命名空间等)。如上所述,这对文件夹没有任何作用,但它确实重命名了项目文件并将所有内容绑定在Visual Studio中。
  4. 关闭Visual Studio。
  5. 重命名文件夹。
  6. 打开Visual Studio并回复“否”以从源代码控制获取项目。
  7. 删除已卸载的项目引用。
  8. 使用从解决方案添加现有项目重新添加每个项目。这将所有内容捆绑在一起,并为我构建了项目。

请评论并纠正上面任何不起作用的内容。

这就是我在VS19中重命名现有项目的方式。

  1. 关闭Visual Studio项目
  2. 重命名并打开驱动器上的每个项目文件夹名称
  3. 重命名每个. csproj
  4. 打开. sln文件并为每个. csproj事件重命名项目目录前缀。
  5. 在Visual Studio中打开. sln文件并重建
  6. 通过遍历每个文件或使用Replace eAll将prevoius nameSpace refrence更新为新的

其他答案提供了很多关于如何做到这一点的细节。不过,这里有一个快捷方式,可以为你节省一些工作:

  1. 重命名项目文件夹
  2. 重命名.csproj文件
  3. 批量更换解决方案中所有文件中的项目名称(我使用GrepWin,它有一个方便的GUI和预览)

这样你就不必繁琐地使用Visual Studio GUI。你也可以以这种方式修复命名空间。你可以使用源代码控制来验证更改(例如打开TortoiseGit Commit并查看更改)。

最简单的方法:

  1. 从当前项目创建模板
    Project -> Export Template... -> Project Template -> Finish
  2. 使用模板创建一个新项目,并使用您希望它具有的名称
    File -> New Project -> Find the template -> Give it the name you want -> Add to existing solution or just as new

就这样,你完成了,如果你愿意,你现在可以删除另一个项目,但首先确保新项目按预期工作。模板应保留所有依赖项和项目设置。

派对有点晚了,但在VS2022中,您建议的方式对我来说仍然是最简单的(我不喜欢直接编辑. sln文件)。

即:

  • 从解决方案中删除项目。

  • 重命名外面的文件夹

  • 将项目重新添加到解决方案中。


例如,如果您想将项目“HelloWorld”重命名为“HelloStackOverflow”。

  1. 在Visual Studio中:将项目从“HelloWorld”重命名为“HelloStackOverflow”
  2. 在Visual Studio中:删除项目“HelloStackOverflow”
  3. 在文件系统中:导航到文件夹:将“HelloWorld”重命名为“HelloStackOverflow”
  4. 在Visual Studio中:在VS2022中添加现有项目“HelloStackOverflow”
  5. 在Visual Studio中:如果此项目存在依赖项,则必须删除它们并将其添加到新项目中。

我最近正在使用VS2022进行. Net 6项目。我需要将我的templatemicroservice重命名为我的UserMicroservice。

. Net 6为您更改了大部分内容。例如AssemblyNames和NameSpace。此外,它会自动更改. sln中的ProjectName引用。因此,这个答案将真正帮助您毫无障碍地重命名您的服务。

输入图片描述

我遵循的步骤:

在Visual Studio中打开解决方案并执行以下步骤:

  1. 我通过右键单击它重命名了我的解决方案。就像,TemplateServiceSolutionUserServiceSolution
  2. 通过右键单击解决方案中的所有项目来重命名它们。喜欢,TemplateServiceUserService
  3. 在一个特定的项目中,我搜索了命名空间,如:namespace TemplateService并将其全部替换为namespace UserService。在每个项目中执行此步骤。还将using TemplateService重新放置到using UserService
  4. 打开你的launchsettings.json,重命名与旧服务相关的任何内容,因为我在launchsettings.json的配置文件中几乎没有东西。
  5. 为了确定,请检查您的启动和program.cs文件,我没有对它们进行任何更改。

关闭Visual Studio中的解决方案并执行以下步骤:

  1. 关闭解决方案并打开文件资源管理器。将我的所有项目文件夹从TemplateService重命名为UserService
  2. 在记事本/记事本++中打开. sln,并且必须更改文件夹结构名称。像一个特定的项目,我应该给出正确的. csproj路径。如图所示,我需要重命名TemplateServiceUserService输入图片描述

在Visual Studio中打开解决方案。一旦您在Visual Studio Code中加载解决方案,您的大多数依赖项将被加载。你准备好了。