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


415

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

我想重命名文件夹以匹配新的解决方案名称,但是我想不出一种自动重构文件夹名称的方法,因此遍历每个项目文件将很痛苦。

有官方的方法吗?或者(是否更不建议如此),是否有免费工具来完成此任务?



13
这如何重复?他要求重命名解决方案而不是项目!
维京人

Answers:


375

手动编辑.sln文件

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

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

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

您还可以看到手动重命名解决方案描述此手动过程的帖子

优点

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

警告事项

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

更新2014-11-02

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

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

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

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

在此处输入图片说明

更新2018-01-31

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

更新2020-05-02

已在Visual Studio 2019中测试。


2
注意:即使使用VS2012,也必须重新启动,因为否则可能会造成混淆,并且您会得到愚蠢的错误
Simon_Weaver13年

1
“如果您具有源代码控制,则将丢失文件的历史记录”,这对我们(审核等)来说是一个主要缺点,是否有建议的路线可以保持历史记录?
dougajmcdonald

23
Visual Studio是一个功能强大的程序,但是不包括此功能吗?哇..
卡·斯蒂布

2
即使遵循@Contango描述的解决方案,我仍然会出错:在程序集中发现的OwinStartup属性...启动新名称,该名称与旧名称冲突。我浏览了obj和bin文件夹,并删除了所有带有旧名称的文件,其他所有内容均保持不变。与我新命名的项目一起重新启动,它运行起来就像一个魅力!谢谢!
nocturns2'9

2
@LucaSteeb是的,据报道,2012年大约有5000万行代码。#monolithic
Chiramisu

158

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

  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("")]
    
  5. 物理删除bin和obj目录。

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

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

  8. 清理并重建项目。


1
完美的作品!但是您需要Dataset手动管理(如果您已附加到项目中)。
Sujith HS 2014年

2
作品!我还必须重命名.sln和.suo文件。我发现步骤4已通过VS 2010中的先前步骤之一完成
补丁

3
对于您是在步骤1中引用解决方案还是项目,我有些困惑。我想对两者都重命名,每个名称都不同。新的名称空间是什么,新的解决方案名称或项目名称是什么?感谢您为我澄清此问题。
艾伦·费希尔

1
这也对我有用(使用VS2013),但是错过了\Packages\repositories.config文件中的项目路径 。
Ted

1
在尝试重新打开解决方案之前,我使用了搜索工具Agent Ransack来搜索所有文件和文件夹,以查找对先前解决方案/项目名称的任何引用并进行更正。我需要在几个地方进行此操作。
安迪G

31

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


1
是否有可用的免费工具可以执行此操作?我什么都找不到。
David Pfeffer,2010年

5
唯一可能对您有所帮助的是CoolCommands 4.0“从文件夹添加项目”,因此,在删除/重命名项目文件夹后,您可以立即将它们全部重新添加:sharptoolbox.com/tools/coolcommands
AaronLS 2010年

1
sublime text 2具有正则表达式搜索和替换功能,使其更易于处理。
jfyelle

22

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


1
这也为我工作。不过,我必须进行一次调整。我在Web应用程序中使用实体框架,并且将旧的.dll文件保留在原始项目名称下,因此我不得不追查为什么我在表类中遇到某种类型的重复错误。一旦将它们从项目中删除,它就可以正常工作。希望这会有所帮助。谢谢,爱德华多!
史蒂夫(Steve)

2
这绝对是最好的方法,请参考msdn.microsoft.com/en-us/library/…以查看将导出的模板移至何处以便在“新建项目”对话框中找到它。
Ares Ou

13

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

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

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

解决方案资源管理器截图

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

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

    命名空间HelloWorld.ui ---->命名空间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("")]

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

  1. 在项目目录中,进入文件夹“ HelloWorld.ui”,然后删除“ bin”和“ obj”目录。

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

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

    Project(“ {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. 您可能会注意到,“调试/运行”按钮已由“附加”按钮代替。如果发生这种情况,只需右键单击该项目,然后选择“设置为启动项目”选项。或者,单击工具>自定义>命令>添加命令>调试,然后添加按钮。

如果您有任何疑问,可以随时重命名该项目,如果有任何疑问,我将很乐意为您提供帮助!


6

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

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




4

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

我在CopyWiz上取得了成功

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


4

删除/添加项目文件的方法

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

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

优点

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

缺点

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

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


4
WinZip的???我肯定希望您使用的是真正的源代码控制,而不是对代码进行zip文件备份。如果您或其他阅读本文的人是,请查看try.github.io并在测试项目上试一试。你不会回去的!
马特·克莱恩

2
我读了您的评论@MattKlein先生,您说得对:D谢谢!
Jeancarlo Fontalvo

@Matt Klein完全同意,并更新为推荐GIT或SVN。
Contango

3

您可以:

  1. 单击文件->新建->从现有项目创建项目

  2. 选择您的原始文件,例如。解决方案1并输入新文件名解决方案2

  3. 在新解决方案2中更改项目名称


我非常喜欢这种方法,是否出于特定原因而否决了?
Coops

将我的机器锁定在尽头-在Visual Studio 2017上
klewis

3

如果您在加载共享项目(例如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之后。


2

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

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

第2步:通过右键单击包含您的SLN项目的“重命名”向前将该文件夹重命名。

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

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

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


2

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

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

因此,我的.csproj文件以及bin和obj文件夹的路径应为:c:\ my \ path \ project1 \ project1 \

  1. 通过双击project1.sln文件在VS中打开解决方案。

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

  3. 在解决方案资源管理器中,右键单击该项目,然后选择“属性”。在“应用程序”选项卡上,更改“程序集名称”和“默认名称空间”。

  4. 在主CS文件(或任何其他代码文件,例如Global.asax)中,重命名名称空间声明以使用新名称。为此,右键单击名称空间,然后选择“重构”>“重命名”,输入新名称。例如:

命名空间project1

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

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

1 [assembly:AssemblyTitle(“此处为新名称”)] 2 [assembly:AssemblyDescription(“”)] 3 [assembly:AssemblyConfiguration(“”)] 4 [assembly:AssemblyCompany(“”)] 5 [assembly:AssemblyProduct(“这里是新名称“]] 6 [assembly:AssemblyCopyright(” Copyright©2013“)] 7 [assembly:AssemblyTrademark(”“)] 8 [assembly:AssemblyCulture(”“)]]

  1. 关闭Visual Studio。

  2. 物理删除bin和obj目录。

  3. 将父文件夹和源文件夹重命名为新名称(project2):

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

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

  1. 通过右键单击“重命名”向前转发的SLN文件来重命名SLN文件名。

  2. 然后,最后打开SLN文件(在记事本或任何编辑器中),然后将任何旧名称复制并替换(Ctrl + h)为新名称。

  3. 打开VS并单击BUILD-> Clean Solution

  4. 单击生成->生成解决方案,然后按F5运行...

  5. 注意1:如果得到以下信息:编译错误CS0246:找不到类型或名称空间名称“ project2”(是否缺少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”文件夹并删除所有内容。

  1. 注意2:如果您尝试将“另存为”保存到一个新的命名项目并保留旧的项目,请考虑通过修改web.config中的connectionStrings并通过重新启动迁移(如果其中包含一个)来复制数据库。项目。

2

我是VS的新手。我只是遇到了同样的问题:经过几个星期的工作,需要重命名一个已启动的项目。这就是我所做的,并且有效。

  1. 以防万一,请备份您的文件夹Project,尽管您不会碰它,但以防万一!
  2. 创建一个新项目,并使用您希望为“新”项目使用的名称进行保存,这意味着您要将“旧”项目更改为该名称。
  3. 建立它。之后,您将拥有一个具有所需名称的项目,但是除了打开一个窗口(在我的情况下为Windows Form App)之外,它什么都没有。
  4. 打开新的proyect,单击Project-> Add ExistingÍtem,然后使用Windows资源管理器找到“ old”文件夹Project,然后选择... Visual Studio xxx \ Projects \ oldApp \ oldApp下的所有文件。
  5. 选择其中的所有文件(.vb,.resx)并将它们添加到“新”项目(应该已经打开的项目)中。
  6. 几乎最后一步是使用解决方案
    资源管理器打开项目文件,然后在第一个选项卡中将默认启动表单更改为应有的表单。
  7. 重建一切。

也许只需单击几下鼠标,便可以执行更多的步骤,但很少或根本不需要输入。希望能帮助到你 :)




By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.