ChatGPT解决这个技术问题 Extra ChatGPT

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

我有一个相当复杂的 Visual Studio 解决方案(2010,但没关系),我需要重命名。

我想重命名文件夹以匹配新的解决方案名称,但我想不出一种自动重构文件夹名称的方法,并且浏览每个项目文件都会很痛苦。

有没有官方的方法可以做到这一点?

.Net 6 与 VS2022,试试这个答案:stackoverflow.com/a/72025102/4393351

C
Contango

手动编辑 .sln 文件

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

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

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

您还可以看到 renaming solution manuallypost which describes this manual process

优点

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

此方法不会删除其他项目对此文件的任何引用(优于删除/添加项目文件方法,请参阅下面的其他答案)。

警告

在重命名任何内容之前将所有内容备份到 .zip 文件中很重要,因为这种方法可能会导致源代码管理出现问题。

如果您的项目受源代码控制,如果您重命名源代码控制之外的文件或目录(使用 Windows 资源管理器),可能会产生问题。如果可以的话,最好使用源代码控制框架本身重命名文件,以保留该文件的历史记录(在右键单击时查看上下文菜单 - 它可能具有重命名文件的功能)。

2014-11-02 更新

ReSharper 添加了一种自动化方法,可实现与上述手动方法相同的结果。如果命名空间带有蓝色波浪线下划线,请单击操作金字塔图标以:

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

在 Windows 资源管理器中重命名目录以匹配命名空间。

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

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

https://i.stack.imgur.com/fmzyo.png

更新 2018-01-31

使用 Visual Studio 2008、2010、2012、2013、2015、2017 更新 1、2、3、4、5 进行测试。

2020-05-02 更新

使用 Visual Studio 2019 进行测试。

2021-11-19 更新

重新测试。仍然有效。


注意:即使使用 VS2012 也有必要重新启动,否则它会变得混乱并且你会得到愚蠢的错误
“如果你有源代码控制,你将丢失文件的历史”这对我们来说是一个主要的缺点(审计等)是否有建议的路线,同时保持历史?
Visual Studio 这么强大的程序,居然不包括这个功能?哇..
即使遵循@Contango 描述的解决方案,我仍然遇到错误:在程序集中发现的 OwinStartup 属性...启动新名称与旧名称冲突。我浏览了 obj 和 bin 文件夹并删除了所有旧名称的文件,而其他所有文件都完好无损。重新启动与我新命名的项目,它运行起来就像一个魅力!感谢!
@LucaSteeb 是的,据报道 2012 年大约有 5000 万行代码。 #单片机
P
Pang

要重命名解决方案:

在解决方案资源管理器中,右键单击项目,选择重命名,然后输入新名称。在解决方案资源管理器中,右键单击项目并选择属性。在“应用程序”选项卡上,更改“程序集名称”和“默认命名空间”。在主 cs 文件(或任何其他代码文件)中,重命名命名空间声明以使用新名称。为此,右键单击命名空间并选择 Refactor > Rename 输入一个新名称。例如:命名空间 WindowsFormsApplication1 更改 Properties/AssemblyInfo.cs 中的 AssemblyTitle 和 AssemblyProduct。 [程序集:AssemblyTitle(“此处的新名称”)] [程序集:AssemblyDescription(“”)] [程序集:AssemblyConfiguration(“”)] [程序集:AssemblyCompany(“”)] [程序集:AssemblyProduct(“此处的新名称”) ] [assembly: AssemblyCopyright("Copyright © 2013")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] 物理删除 bin 和 obj 目录。重命名项目物理文件夹目录。打开 SLN 文件(在记事本或任何编辑器中)并更改项目的路径。清理并重建项目。


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

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


是否有可用的免费工具可以做到这一点?我什么也找不到。
唯一可能对您有所帮助的是 CoolCommands 4.0“从文件夹添加项目”,因此在您删除/重命名项目文件夹后,您可以一次将它们全部添加回来:sharptoolbox.com/tools/coolcommands
sublime text 2 具有正则表达式搜索和替换功能,可以更轻松地处理此问题。
e
edoardo

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


这也对我有用。不过,我不得不做出一项调整。我在 Web 应用程序中使用实体框架,它在原始项目名称下留下了旧的 .dll 文件,所以我不得不找出为什么我会收到某种类型的表类重复错误。一旦我从项目中删除了这些,它工作得很好。希望这会有所帮助。谢谢,爱德华多!
这绝对是最好的方法,请参阅 msdn.microsoft.com/en-us/library/… 以查看将导出的模板移动到何处以便在“新建项目”对话框中找到它。
在 VS2022 中工作
C
Community

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

假设我们将一个名为“HelloWorld.ui”的项目更改为“Section1to5.ui”

转到解决方案资源管理器(下面的屏幕截图),右键单击要重命名的项目并选择“重命名”。输入您想要的新名称。

https://i.stack.imgur.com/qzTET.png

右键单击刚刚重命名的项目,然后单击“属性”。在“应用程序”选项卡下,更改“程序集名称”和“默认命名空间”。在主 Program.cs 文件(或您可能创建的任何其他代码文件)中,重命名命名空间声明以使用新名称。为此,右键单击命名空间并选择 Refactor > Rename 输入一个新名称。例如: namespace HelloWorld.ui ----> namespace Section1to5.ui 接下来,展开“属性”并双击 AssemblyInfo.cs 文件。您会注意到以下代码片段:

[程序集:AssemblyTitle("HelloWorld.ui")] [程序集:AssemblyDescription("")] [程序集:AssemblyConfiguration("")] [程序集:AssemblyCompany("Microsoft")] [程序集:AssemblyProduct("HelloWorld.ui" )] [程序集:AssemblyCopyright("Copyright © Microsoft 2015")] [程序集:AssemblyTrademark("")] [程序集:AssemblyCulture("")]

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

在项目目录中,进入文件夹“HelloWorld.ui”并删除“bin”和“obj”目录。完成后,将文件夹“HelloWorld.ui”重命名为新项目名称。使用 Notepad 或 Notepad++ 等文本编辑器打开重命名的解决方案文件并编辑以下行: Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HelloWorld.ui", "HelloWorld.ui\HelloWorld. ui.csproj", "{39FC65A3-3AE7-4EC9-B8F7-74F971636C70}"

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

用 Visual Studio 打开解决方案文件,清理并重建项目。您可能会注意到“调试/运行”按钮已被“附加”按钮取代。如果发生这种情况,只需右键单击项目并选择“设置为启动项目”选项。或者,单击工具>自定义>命令>添加命令>调试并添加按钮。

您已完成对项目的重命名,如果您有任何疑问,请随时发布,我很乐意提供帮助!


T
ToastedSoul

2021 年更新:

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

https://github.com/ModernRonin/ProjectRenamer

老答案:

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

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

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

https://i.stack.imgur.com/3Tkl7.png


M
Michael

删除您的 bin 和 obj 子文件夹以删除大量不正确的引用,然后使用 windows 搜索旧名称。

编辑找到并重建的任何代码或 xml 文件,现在应该可以了。


D
Danilo Ivanovic

删除/添加项目文件方法

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

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

优点

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

缺点

如果您删除一个库,它会从其他项目中删除对该库的任何引用。在您重新添加对所述库的引用之前,解决方案可能无法编译(这很容易)。这就是第 1 步(备份)如此重要的原因。

如果您有源代码控制,您将丢失文件的历史记录。

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


压缩包???我当然希望您使用真正的源代码控制,而不是对您的代码进行 zip 文件备份。如果您或其他阅读本文的人是,请查看 try.github.io 并在测试项目中试一试。你不会回去的!
我读了您的评论 @MattKlein 先生,您是对的:D 谢谢!
@Matt Klein 完全同意,更新为推荐 GIT 或 SVN。
如果在 Visual Studio 中再次添加项目之前在版本控制中重命名项目目录,则可以使用此方法在版本控制中维护历史记录。大多数工具将匹配版本控制和磁盘上的新目录名称,并且可以正常工作(例如 SourceGear Vault 就是这样做的)。
W
Wotuu

使用 Notepad++ 的“在文件中查找”功能对我来说效果很好(ctrl + H,在文件中查找)。

http://notepad-plus-plus.org/download/v6.2.2.html


b
bluish

我尝试了 Visual Studio Project Renamer,但是在我尝试的少数情况下它抛出了异常。

我在 CopyWiz 上取得了很好的成功。

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


O
Olle Sjögren

你可以:

单击文件->新建->从现有项目中创建项目选择您的原始文件,例如。解决方案1并输入新文件名解决方案2在新解决方案2中更改项目名称


我非常喜欢这种方法是否出于特定原因而被否决?
将我的机器锁定到接近尾声 - 在 Visual Studio 2017 上
P
Pang

如果您在加载共享项目(如 Xamarin)时遇到问题,请记住更改对 csproj 文件中共享库的引用。我开发了一个 CocosSharp 游戏,而 Droid/iOS/WP81 项目不想加载。我必须在每个引用共享库的 csproj 文件(Driod/iOS/WP81)中更改下面的行。这是由于文件夹名称更改引起的,因此请将 YOUR_PREVIOUS_NAMESPACE 替换为您的新文件夹名称。

<Import Project="..\YOUR_PREVIOUS_NAMESPACE.Shared\EmptyProject.Shared.projitems" Label="Shared" />

另外,我注意到对于 .Driod 项目,项目属性中的程序集名称无法使用 Visual Studio 更改(我使用 2015)。我不得不在 .Droid.csproj 文件中手动更改程序集名称。

<AssemblyName>YourNameSpace</AssemblyName>

然后我加载了解决方案并在项目属性视图中出现了新名称。生成具有该名称的 dll 后。


P
Pavi Thran

如果您在 Visual Studio 2010 中创建网站。您可以按如下方式更改项目名称。

第 1 步:在 Visual Studio 2010 中,SLN 文件将存储在 Visual Studio 2010 中的项目文件夹下,而源文件将存储在 Visual Studio 2010 中的网站文件夹下。

第 2 步:通过右键单击包含您的 SLN 项目的 Rename 转发的文件夹来重命名文件夹。

第 3 步:通过右键单击该 SLN 文件,通过 Rename 转发重命名 SLN 文件名。

第 4 步:在 Visual Studio 2010 的网站下重命名包含该 SLN 文件源的文件夹。

第 5 步:最后双击您的 SLN 文件并更改 SLN 源文件夹的根目录。


D
Dudi

在 WEB 项目中的 Visual Studio 2013 上唯一适用于我的解决方案:

假设我想将“project1”重命名为“project2”。假设我的 .sln 文件的物理路径是:c:\my\path\project1\project1.sln

所以我的 .csproj 文件以及 bin 和 obj 文件夹的路径应该是:c:\my\path\project1\project1\

通过双击 project1.sln 文件在 VS 中打开解决方案。在解决方案资源管理器中,右键单击项目(不是解决方案!!!),选择重命名,然后输入新名称。在解决方案资源管理器中,右键单击项目并选择属性。在“应用程序”选项卡上,更改“程序集名称”和“默认命名空间”。在主 CS 文件(或任何其他代码文件,例如 Global.asax)中,重命名命名空间声明以使用新名称。为此,右键单击命名空间并选择 Refactor > Rename 输入一个新名称。例如:

命名空间项目1

4.1 在解决方案资源管理器中,右键单击项目(不是解决方案!!!),选择重命名,然后输入新名称。

确保:Properties/AssemblyInfo.cs 中的 AssemblyTitle 和 AssemblyProduct 设置为新名称(“project2”)。

[程序集:AssemblyTitle("此处的新名称")] 2 [程序集:AssemblyDescription("")] 3 [程序集:AssemblyConfiguration("")] 4 [程序集:AssemblyCompany("")] 5 [程序集:AssemblyProduct("此处为新名称")] 6 [程序集:AssemblyCopyright("Copyright © 2013")] 7 [程序集:AssemblyTrademark("")] 8 [程序集:AssemblyCulture("")]

关闭 Visual Studio。物理删除 bin 和 obj 目录。将父文件夹和源文件夹重命名为新名称(project2):

在示例中:c:\my\path\project1\project1

将是:c:\my\path\project2\project2

重命名 SLN 文件名,右键单击该 SLN 文件,通过 Rename 转发。然后最后打开 SLN 文件(在记事本或任何编辑器中)并复制 (Ctrl+h) 任何旧名称并将其替换为新名称。打开 VS 并单击 BUILD -> Clean Solution 单击 Build -> Build solution,然后按 F5 运行... 注意1:如果您收到类似以下内容: Compilation Error CS0246: The type or namespace name 'project2' could not be found(是您缺少 using 指令或程序集引用?)

源文件:c:\Users\Username\AppData\Local\Temp\Temporary ASP.NET Files\root\78dd917f\d0836ce4\App_Web_index.cshtml.a8d08dba.b0mwjmih.0.cs

然后转到“Temporary ASP.NET Files”文件夹并删除所有内容。

注意2:如果您尝试“另存为”到一个新的命名项目并保留旧项目,请考虑通过修改 web.config 中的 connectionStrings 来复制您的数据库,如果您在项目。


J
J. Davalos

我是 VS 的新手。我只是遇到了同样的问题:工作几周后需要重命名一个已启动的项目。这就是我所做的,它奏效了。

以防万一,请备份您的文件夹 Project,虽然您不会触摸它,但以防万一!创建一个新项目并使用您希望为“新”项目使用的名称保存它,这意味着您要将“旧”项目更改为的名称。构建它。之后,您将拥有一个具有您想要的名称的项目,但它除了打开一个窗口(在我的例子中是一个 Windows 窗体应用程序)之外什么都不做。打开新项目后,单击 Project->Add Existing Ítem 并使用 Windows 资源管理器找到“旧”文件夹 Project 并选择 ...Visual Studio xxx\Projects\oldApp\oldApp 下的所有文件 选择其中的所有文件 (. vb,.resx)并将它们添加到您的“新”项目(应该已经打开的项目)。几乎最后一步是使用解决方案资源管理器打开您的项目文件,并在第一个选项卡中将默认启动表单更改为应有的表单。重建一切。

也许更多的步骤,但更少或根本没有打字,只需点击几下鼠标。希望能帮助到你 :)


J
Jaydeep Shil

我已关注 https://gist.github.com/n3dst4/b932117f3453cc6c56be 链接,并且能够成功重命名我的整个解决方案。


C
Community

连同此链接的答案

https://stackoverflow.com/a/19844531/6767365

https://i.stack.imgur.com/ybunQ.jpg


R
Ricardo Rix

要重命名网站:

http://www.c-sharpcorner.com/Blogs/46334/rename-website-project-in-visual-studio-2013.aspx

找到并编辑 IISExpress 的 applicationhost.config,在此处找到:C:\Users{username}\Documents\IISExpress\config