Visual Studio复制项目

213

我希望复制我的项目,但不想从头开始添加文件和引用等。请注意,我不是指复制以进行部署。只是简单的复制。

在VS中是否有相应的工具可以实现这一功能? 我正在使用VS 2008。

14个回答

252

只需创建一个模板;

从您的项目中选择:项目 - 导出模板

向导将让您定义:

  • 模板名称
  • 模板描述
  • 图标
  • 预览图像

然后,它会将您的项目压缩到“我的导出模板”目录中。您还可以选择在创建新项目时使您的模板可用。

当您使用模板创建新项目时,命名空间将在每个文件中正确为“your_new_project_name”,所有引用都是正确的,一切都完美 :)

您可以将.zip文件发送给任何人,他们必须将.zip文件复制(而不是解压缩)到Templates\ProjectTemplates目录中以供使用。

我制作了一个 ASP.NET MVC 模板,其中包含文件夹、布局页面、视图模型等,排列方式与我的喜好相同。
注意:
如果您的项目中有一个空文件夹,则不会将其添加到模板中,因此我只添加了每个文件夹适当的空类以及图像文件夹的示例图片。

17
在VS2017中,导出模板位于“项目”顶级菜单项下。 - Choco
9
这应该是被选中的答案。非常简单!这个过程也应该把它复制到你的Templates\ProjectTemplates文件夹中,只要确保一下。我不得不重新启动我的Visual Studio才能在项目创建对话框中看到它。 - midoriha_senpai
1
似乎将解决方案中的顶级项目模板化,而不是所选项目或标记为“默认项目”的项目。这个答案对我没用,因为我的解决方案中的顶级项目是一个巨大的聚合体(我正在使用bullet3,并想复制“Hello, world!”项目,但模板化却复制了巨大的“App_ExampleBrowser”项目,即使我已经左键单击、右键单击、选择为默认项目和其他我能想到的选择方式都试过了)。 - Reb.Cabin
9
当要“导入(import)”模板以创建新项目时,我无法弄清楚如何操作。结果发现我必须使用“新项目(New Project)”对话框中的搜索栏来定位模板。 - Tawab Wakil
3
在VS2019中,搜索模板无法找到我的新模板。此外,如果我筛选了语言或平台,即使我选择了正确的语言/平台,新模板也会从列表中消失...有点令人困惑,但最终还是不错的。 - AndruWitta
显示剩余6条评论

168

如果您想要副本,最快的方法是保存该项目。然后在文件系统中复制整个项目。返回Visual Studio并打开副本(通过右键单击解决方案 => 添加现有项目 => 打开复制的项目)。从那里开始,我最可能建议重新命名项目/解决方案 (以下链接中有安全重命名项目的步骤),以便您不会有两个同名的项目,但这是最快的制作副本的方法。


35
那么,项目 GUID 会发生什么变化? - Lars Corneliussen
4
如果您有任何svn文件,请不要忘记将其删除(我曾经犯过这个错误!)--> http://weblogs.asp.net/jgalloway/archive/2007/02/24/shell-command-remove-svn-folders.aspx - qbantek
60
如果在同一个解决方案中存在另一个具有相同GUID的项目,那么Visual Studio会自动更新项目GUID。请注意,这里的GUID是指项目全局唯一标识符。 - Sebastian Krysmanski
5
我正在尝试这个方法,但它不能重命名应用程序命名空间。这不是我想要的。 - Jason
4
在Community 2017 Version 15.8.4中,Visual Studio无法自动更新项目GUID。如果您的AssemblyInfo.cs在源代码控制中,那么它怎么可能自动更新呢? - PeterVermont
显示剩余3条评论

15

强烈不建议复制项目,因为内部形成的一些配置文件,如 .csproj,.vspscc 等可能会(而且很可能会)指向先前解决方案位置和系统或 TFS 中其他路径/位置的引用。除非您是专家级别读取这些文件并修复引用的人,否则不要尝试复制项目。

您可以创建一个相同类型的骨架项目进行复制,这将创建适当的 .csproj,.vspscc 文件。现在,您可以自由地复制来自先前项目的类文件、脚本和其他内容,因为它们不会对其产生影响。这将确保平稳的构建和版本控制(如果您选择对此感兴趣)

话虽如此,让我给您提供一种无论如何都可以复制项目的方法:

  1. 在“解决方案资源管理器”中找到您要复制的项目并 右键单击
  2. 现在选择“'以文件夹形式在文件资源管理器中打开'”(假设您已经将解决方案映射到磁盘上的本地路径)。
  3. 选择您要复制为整个文件夹的项目(包括所有依赖项、bin .vspscc 文件、.csproj 文件)
  4. 将它们粘贴到所需位置(可以是同一个解决方案文件夹甚至另一个解决方案文件夹)。如果在同一个解决方案文件夹中,请将其重命名,以及 .csproj 和其他内部文件的名称。
  5. 现在回到 Visual Studio,右键单击解决方案 > 添加 > 现有项目...
  6. 浏览并从您放置它的位置选择项目文件(.csproj 文件),然后选择“打开
  7. 该文件现在出现在解决方案资源管理器中供您使用。.

您现在可能需要解决一些构建错误,可能涉及重复/缺少引用等问题,但除此之外,逻辑和结构与您期望的一样完美。


5
更新:截至2019年,最佳答案是下面@Shane提供的答案。制作Visual Studio模板是克隆项目而不出现引用问题的完美方式。 - Vikram K
1
实际上,我最终使用了两种方法来解决多个项目的问题。模板让它开始运行...然后是简单的复制粘贴完成它。奇怪的是,似乎我一次又一次地回到相同的答案。 - Chris Catignani

6

我猜如果这是你经常做的事情,有一个小型(非免费)实用程序承诺为您完成:我没有使用过,所以不确定它有多好:

http://www.kinook.com/CopyWiz/

在 CodePlex 上还有这个项目:

http://clone.codeplex.com/

我可能会尝试使用CodePlex项目,如果不起作用,我将手动重命名所有内容并编辑sln文件。


Codeplex应用程序“Solution Clone”运行良好。它复制并重命名所有解决方案文件,并保留所有引用。我所需要做的唯一事情就是在打开复制的解决方案后将其重新指向新的重命名项目文件,然后在项目属性中重命名程序集名称和根命名空间。虽然这比手动完成所有操作要容易得多。 - Fütemire

4

我遵循以下步骤,并使用开发工具Resharper,顺便说一下这个工具很棒:

所以:

  1. 复制现有项目文件夹到您想要的目标位置。
  2. 进入源代码控制,在您想要的根文件夹上右键单击,选择"Add items to folder..."。然后,一个向导将出现,以选择要复制的文件(默认情况下,某些文件是不需要的,向导会引导您进行更改)。
  3. 更改解决方案文件 (*.sln) 的名称。
  4. 更改子项目的名称(如果存在)。
  5. 使用Resharper更改绑定命名空间名称(我会自动安全地执行这项工作)。另一种方法是手动更改所有命名空间为新名称。
  6. 相同操作适用于方法名称。
  7. 如果需要更改,请检查解决方案属性

就这样,你准备好了!!!


2

在 Shane 的回答中(顺便说一句,他的方案非常好)...

您可能会在参考列表中遇到大量黄色三角形。大多数情况下,这些都可以通过执行 生成 -> 清理解决方案生成 -> 重新生成解决方案 来消除。

我碰巧有一些 Google API 引用有点棘手... 还有 NewtonSoft JSon。

尝试重新安装相同版本的 NuGet 包没有起作用。
Visual Studio 认为您已经安装了它。

要解决此问题:
1:记录原始版本。
2:安装下一个更高/更低版本... 然后卸载它。
3:从步骤 #1 安装原始版本。


1

最好的方法是从头开始创建一个新项目,然后进入要复制的项目文件所在的文件夹(项目、form1、除文件夹以外的所有文件)。 重命名这些文件(除了form1文件),例如:我将Ch4Ex1文件复制到我的Ch4Ex2项目中,但首先将文件重命名为Ch4Ex2。 将这些文件复制并粘贴到Visual Studio中新项目的解决方案资源管理器中。 然后只需覆盖这些文件,你就可以使用它们了!

虽然这是一个旧帖子,但我希望它能帮助任何正在寻找答案的人!


1

最简单的方法是将项目导出为模板并保存到默认模板位置。然后,将模板复制到要移动到的确切目录中。之后,在新位置上打开Visual Studio,创建一个新项目,您将收到一个提示来搜索模板。搜索您命名的模板,选择它即可完成!


0

对于Visual Studio 2022:

从Visual Studio中将项目导出为模板。这将允许您使用生成的模板将项目导入到不同的解决方案中。

  • 在解决方案资源管理器中选择项目
  • 项目 > 导出模板
  • 选择“项目模板”作为输出类型。在下拉菜单中,选择要为其创建模板的项目。
  • 将出现“选择模板选项”。输入模板名称。如果项目中定义的任何命名空间包含原始项目名称,它将被您输入的项目名称替换。例如,如果原始项目是My.Project,并且您有一个命名空间My.Project.Common,那么如果您将模板名称设置为My.ProjectCopy,新的项目模板将具有命名空间My.ProjectCopy.Common
  • 选择“自动将模板导入到Visual Studio”
  • 在其他解决方案中,右键单击要添加项目的位置,然后选择添加 > 新建项目。在出现的窗口中搜索您的模板,并选择它:

enter image description here


0
我有一个项目,源文件在项目文件夹下的一个文件夹中。当我复制了项目文件夹但没有复制源文件夹并打开复制的项目时,源文件不会丢失,而是在旧位置找到。我关闭了项目,也复制了源文件夹,并重新打开了项目。现在,项目神奇地引用了复制的源文件(新路径显示在“另存为”中,文件更改已保存在复制版本中)。
但需要注意的是:如果旧和新项目文件夹都不在使用的库文件夹下面,上述魔法也会丢弃对库的绝对引用,并期望它在相同的相对路径下。
我尝试过使用VS Express 2012。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接