在Visual Studio中重命名解决方案(和目录)的正确方法

Dav*_*fer 389 visual-studio

我有一个相当复杂的Visual Studio解决方案(2010年,但无所谓),我需要重命名.

我想重命名文件夹以匹配新的解决方案名称,但我无法找到自动重构文件夹名称的方法,并且浏览每个项目文件将是痛苦的.

有正式的方法吗?或者(更不优选),是否有免费工具来实现这一目标?

Con*_*ngo 350

手动编辑.sln文件

此方法完全旨在重命名项目的目录,如Windows资源管理器中所示.

此方法不会遇到下面的删除/添加项目文件方法中的问题(引用消失),但如果您的项目受源代码控制,则可能导致问题(请参阅下面的注释).这就是第2步(备份)如此重要的原因.

  1. 关闭Visual Studio.
  2. 创建.sln文件的备份(您可以随时回滚).
  3. 想象一下,您想要将目录"Project1"重命名为"Project2".
  4. 如果不使用源代码管理,请使用Windows资源管理器将文件夹从"Project1"重命名为"Project2".
  5. 如果使用源代码管理,请使用源代码管理提供的功能将文件夹从"Project1"重命名为"Project2".这会保留文件的历史记录.例如,TortoiseSVN右键单击该文件,选择TortoiseSVN .. Rename.
  6. 在.sln文件中,使用NotePad等文本编辑器将"Project1"的所有实例编辑为"Project2" .
  7. 重新启动Visual Studio,一切都将像以前一样工作,但项目位于不同的目录中.

您还可以手动发布描述此手动过程的重命名解决方案.

好处

  • 您可以使Windows资源管理器中的目录与解决方案中的项目名称匹配.
  • 此方法不会删除其他项目的任何引用此文件(一个优势的删除/添加项目文件的方法,请参见下面我对方的回答).

警告

  • 在重命名任何内容之前将所有内容备份到.zip文件中很重要,因为此方法可能会产生源代码控制问题.
  • 如果您的项目受源代码管理,如果您重命名源代码管理之外的文件或目录(使用Windows资源管理器),则可能会产生问题.如果可以的话,最好使用源代码控制框架本身重命名文件,以保留该文件的历史记录(在右键单击时查看上下文菜单 - 它可能具有重命名文件的功能).

更新2014-11-02

ReSharper添加了一种自动方法,可以获得与上述手动方法相同的结果.如果命名空间用粗糙的蓝线加下划线,请单击操作金字塔图标以:

  • 重命名命名空间以匹配Windows资源管理器中的目录名称,或;
  • 在Windows资源管理器中重命名该目录以匹配命名空间.

在第二种情况下,最后一个单词在Windows资源管理器中定义新目录名称,例如,如果我们将名称空间更改为ViewModel2,它将提供将文件移动到文件夹ViewModel2.

但是,这不一定会更新源代码管理中的文件,因此您可能仍需要使用手动方法.

在此输入图像描述

更新2018-01-31

使用Visual Studio 2008,2010,2012,2013,2015,2017测试更新1,2,3,4,5.

  • Visual Studio是如此强大的程序,但这个功能不包括在内?哇.. (14认同)
  • 注意:即使使用VS2012,也必须重新启动,否则可能会混淆并导致愚蠢的错误 (2认同)
  • 即使遵循@Contango描述的解决方案,我仍然得到并且错误:在程序集中发现的OwinStartup属性...启动新名称与旧名称冲突.我浏览了obj和bin文件夹并删除了任何带有旧名称的文件,保留了其他所有内容.重启vs与我新命名的项目,它像一个魅力!谢谢! (2认同)
  • @LucaSteeb 是的,据报道 2012 年有大约 5000 万行代码。#整体式 (2认同)

Zah*_*med 147

以下是重命名解决方案时需要遵循的步骤:

  1. 在"解决方案资源管理器"中,右键单击项目,选择"重命名",然后输入新名称.
  2. 在解决方案资源管理器中,右键单击项目并选择"属性".在"应用程序"选项卡上,更改"程序集名称"和"默认名称空间".
  3. 在主cs文件(或任何其他代码文件)中,重命名命名空间声明以使用新名称.为此,右键单击命名空间,然后选择"重构">"重命名",输入新名称.例如: namespace WindowsFormsApplication1
  4. 在Properties/AssemblyInfo.cs中更改AssemblyTitle和AssemblyProduct.

    [assembly: AssemblyTitle("New Name Here")]
    [assembly: AssemblyDescription("")]
    [assembly: AssemblyConfiguration("")]
    [assembly: AssemblyCompany("")]
    [assembly: AssemblyProduct("New Name Here")]
    [assembly: AssemblyCopyright("Copyright ©  2013")]
    [assembly: AssemblyTrademark("")]
    [assembly: AssemblyCulture("")]
    
    Run Code Online (Sandbox Code Playgroud)
  5. 物理删除bin和obj目录.

  6. 重命名项目物理文件夹目录.

  7. 打开SLN文件(在记事本或任何编辑器中)并更改项目的路径.

  8. 清理并重建项目.

  • 我对于您是否在步骤1中引用解决方案或项目感到困惑.我想重命名两者,每个都使用不同的名称.新命名空间是什么,新的解决方案名称或项目名称?谢谢你为我澄清这一点. (3认同)
  • 它完美地工作了!但是您需要手动管理您的“数据集”(如果您已附加到您的项目)。 (2认同)
  • 作品!我还必须重命名.sln和.suo文件.我发现第4步已经完成了VS 2010中的前一步骤 (2认同)
  • 这也对我有用(使用 VS2013),但它错过了 `\Packages\repositories.config` 文件中的项目路径。 (2认同)
  • 在尝试重新打开解决方案之前,我使用了一个搜索工具 Agent Ransack 来搜索所有文件和文件夹,以查找对先前解决方案/项目名称的任何引用并更正它们。有几个地方我需要这样做。 (2认同)

Aar*_*nLS 30

visual studio中的重命名操作只会更改文件名,即项目,*.prj和解决方案*.sln.您将需要使用文件系统单独重命名文件夹,并且您将需要删除和读取项目,因为它们将具有新的foldernames.但请注意,解决方案和项目文件分别是texst和xml文件.您可以编写自己的程序来解析它们,并在内部重命名文件夹名称,文件名和修复项目/解决方案文件.

  • 唯一可以帮到你的是CoolCommands 4.0"从文件夹中添加项目",这样在你删除/重命名项目文件夹后,你可以一次性添加它们:http://sharptoolbox.com/tools/coolcommands (5认同)

小智 20

您还可以导出模板,然后从导出的模板创建一个新项目,根据需要更改名称

  • 这绝对是最好的方法,请参阅https://msdn.microsoft.com/en-us/library/y3kkate1.aspx?f=255&MSPPError=-2147217396以查看移动导出模板的位置以便查找它在"新建项目"对话框中. (2认同)

小智 10

下面是在Visual Studio 2013中重命名整个解决方案的分步方法

假设我们正在将名为"HelloWorld.ui"的项目更改为"Section1to5.ui"

  1. 转到解决方案管理器(下图),右键单击上要重命名,然后选择"重命名"项目.输入您想要的新名称.

Solution Explorer截图

  1. 右键单击刚刚重命名的项目,然后单击"属性".在"应用程序"选项卡下,更改"程序集名称"和"默认名称空间".

  2. 在主要的Program.cs文件(或您创建的任何其他代码的文件),命名空间声明,以使用新的名称.为此,右键单击命名空间,然后选择"重构">"重命名",输入新名称.例如:

    namespace HelloWorld.ui ----> namespace Section1to5.ui

  3. 接下来,展开"属性",然后双击AssemblyInfo.cs文件.您会注意到以下代码片段:

[assembly: AssemblyTitle("HelloWorld.ui")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("HelloWorld.ui")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2015")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
Run Code Online (Sandbox Code Playgroud)

您需要将Properties/AssemblyInfo.cs中的AssemblyTitle和AssemblyProduct更改为新名称,在此示例中,从"HelloWorld.ui"更改为"Section1to5.ui".完成更改名称后,保存并关闭Visual Studio.

  1. 在项目目录,进入该文件夹"HelloWorld.ui"内删除的"bin"和"目标文件"目录.

  2. 完成后,将文件夹"HelloWorld.ui"重命名为新项目名称.

  3. 使用文本编辑器(如Notepad或Notepad ++)打开重命名的解决方案文件,然后编辑以下行:

    项目("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}")="HelloWorld.ui","HelloWorld.ui\HelloWorld.ui.csproj","{39FC65A3-3AE7-4EC9-B8F7-74F971636C70}"

将"HelloWorld.ui"的所有实例替换为您为项目选择的新名称,在本例中为"Section1to5.ui".这会在步骤6中将项目的路径更改为重命名的目录.

  1. 使用visual studio打开解决方案文件,清理并重建项目.

  2. 您可能会注意到"调试/运行"按钮已被"附加"按钮替换.如果发生这种情况,只需右键单击该项目并选择"设置为启动项目"选项.或者,单击工具>自定义>命令>添加命令>调试,然后添加按钮.

你完成重命名的项目,如果您有任何疑问,随意张贴,我很乐意帮帮忙!


Mic*_*ael 6

删除bin和obj子文件夹以删除不正确引用的加载,然后使用windows搜索旧名称.

编辑找到并重建的任何代码或xml文件,现在应该没问题.


Con*_*ngo 6

删除/添加项目文件方法

此方法完全旨在重命名项目的目录,如在 Windows 资源管理器中所见。

  1. 使用 GIT、SVN 或 WinZip 之类的东西备份整个项目(重要!)。
  2. 在 Visual Studio 的解决方案中,删除项目。
  3. 在 Windows 资源管理器中重命名目录。
  4. 在 Visual Studio 中重新添加该项目。

好处

  • 您可以使 Windows 资源管理器中的目录与解决方案中的项目名称匹配。

缺点

  • 如果您删除一个库,它会从其他项目中删除对该库的任何引用。在此之后,解决方案可能无法编译,直到您重新添加对所述库的引用(这很容易)。这就是第 1 步(备份)如此重要的原因。
  • 如果您有源代码控制,您将丢失文件的历史记录。

右键单击项目并选择“在 Windows 资源管理器中打开文件夹”对于在执行此过程时跟踪项目的存储位置很有用。

  • WinZip???我当然希望您使用真正的源代码管理,而不是对代码进行 zip 文件备份。如果您或其他阅读本文的人是,请查看 https://try.github.io/ 并在测试项目中试一试。你不会回去! (4认同)
  • 我读了您的评论 @MattKlein 先生,您是对的 :D 谢谢! (2认同)

Cam*_*ron 5

我尝试了 Visual Studio 项目重命名器,但是,在我尝试的少数情况下它会抛出异常。

我使用CopyWiz取得了巨大成功

我与他们没有任何关系,而且我还没有为此付费,但我可能必须尽快付费,因为它似乎是唯一适用于我的 C# 和 C++ 项目的工具。不过,我确实希望他们能赚点钱,并继续改进。


Toa*_*oul 5

2021 更新:

renameproject使这变得毫不费力。一个简单的 CLI 工具使用,它甚至在成功时创建一个 git commit。

https://github.com/ModernRonin/ProjectRenamer


旧答案:

我已经使用 Visual Studio 扩展“完全重命名项目”成功地重命名了 ASP.NET Core 2 解决方案中的项目。

然后我使用 ReSharper 来调整命名空间(右键单击项目,重构,调整命名空间...)

https://github.com/kuanysh-nabiyev/RenameProjectVsExtension

在此处输入图片说明