在Visual Studio 2010中复制一个项目

6

在Visual Studio 2010中,有没有简单的方法可以复制一个项目?

将包含项目的文件夹复制到其他路径并打开它会导致以下错误。

Error

我只对不需要超过1个简单操作的解决方案感兴趣。我正在创建一个简单的控制台项目,将会复制数百次,而且不喜欢每次需要完成这么简单的事情时都要进入设置并重复多个步骤。
我正在使用Visual C++ Express 2010。请注意下面的项目结构。我将其创建为一个空项目,并添加了1个单独的文件main.cpp。

Project structure

该项目是使用设置创建的。

在资源管理器中,该项目看起来像这样

有一个复制项目功能,但这意味着需要进行多个手动操作:

  • 打开旧项目;
  • 在菜单上点击复制;
  • 关闭旧项目;

复制解决方案的父文件夹可以起到作用,但这会创建一个不必要的文件夹,每次访问复制的项目时都需要导航到该文件夹。我想避免任何不必要的“通行”文件夹。

请注意,创建项目时未选中解决方案目录,详见上面的链接。如果选中,则会导致出现2个不必要的传递文件夹。有一个解决方案文件夹创建解决方案的文件夹和一个项目文件夹。取消复选框后,可以摆脱项目文件夹,并在解决方案目录中创建项目文件,但仍然存在其他两个文件夹 - 基于以上原因,我希望只保留其中一个文件夹。

4
你在项目中是否“硬编码”了任何路径?如果你使用相对路径和项目/解决方案路径的变量,就不应该有问题。还有一个好奇的问题:“我正在创建一个简单的控制台项目,我将复制数百次。”为什么要这样做? - Bart
main.cpp文件是在.sln路径的同一文件夹还是子文件夹中? - Andriy Tylychko
2
如果您需要多次制作相同类型的项目,请考虑将其创建为项目模板(C#)或向导(C ++)。http://msdn.microsoft.com/en-us/library/96xz4cw2.aspx - Pete Kirkham
我在创建新项目时硬编码了项目路径(请参见更新的问题中的链接)。有没有避免硬编码路径的方法? - Leonid
模板对我来说不是最好的解决方案,因为从模板创建项目比复制文件夹更复杂(打开Visual Studio,通过菜单导航创建项目)。我想下一步尝试复制文件夹,但宁愿坚持复制文件夹。 - Leonid
是的,main.cpp和.sln在同一个文件夹中。请查看附加到问题的图像链接中的完整文件夹结构。 - Leonid
5个回答

7
希望您能够直接复制vcxproj文件本身,但很遗憾,您不能这样做。问题在于项目文件包含一个GUID(全球唯一标识符),该GUID可在Visual Studio中唯一标识该项目;在内部,通常根据其GUID引用项目,而不是根据名称。当您复制项目文件时,您会复制GUID而不更改它,这将无法正常工作。请注意,vcxproj文件和任何sln文件都将引用GUID,因此在更改GUID之前,您可能希望避免将其添加到任何sln文件中。
项目文件的GUID部分如下:
<ProjectGuid>{830DD595-EAD5-475B-9360-E4C2FD7CCC53}</ProjectGuid>

这行文本在有效的vcxproj文件中恰好出现一次。任何IDE外的复制项目的解决方案都需要手动更改GUID。将此步骤简化为单个步骤的唯一方法是编写一个工具来更改GUID,虽然使用好的编辑器进行搜索和替换也可能足够快速。函数UuidCreate()可能会对您有所帮助,请注意直接编辑vcxproj文件也很有帮助,如果您需要将绝对路径更改为相对路径等等。

当然,您也可以继续使用Visual Studio内部的工具手动复制它们;它存在的原因可能是为了自动化您需要执行的GUID更改。我会注意到,对于我们自己的项目,我经常使用记事本来编辑项目文件,尽管Notepad++或UltraEdit是更好的选择。


谢谢!在VS 2010中复制一个项目不能简单地完成,需要编写一个特殊脚本来更改GUID或使用VS复制工具。 - Leonid
1
这些信息是不正确的。如果您在 Visual Studio 中添加一个已经具有相同 GUID 的项目,Visual Studio 将自动更改该项目的 GUID。因此,在资源管理器中可以轻松复制项目文件夹而不会出现任何问题。 - BertR
BertR: 我个人在使用Visual Studio时遇到过这样的问题,当编辑配置设置时,它没有执行,导致出现严重的错误(这可能是VS2003或VS2005,我不确定)。我还没有在较新的版本中尝试过这种情况,所以你可能是对的,至少对于更新的VS版本来说是这样。无论如何,了解GUID问题是很好的,因为从VS2010开始,解决方案文件仍然使用GUID引用项目文件,因此任何完全自动化的解决方案都必须处理这个问题。 - AHelps

4
似乎您有一些不寻常的要求,例如没有额外的文件夹,只使用一个简单的操作等等。针对这种情况,我建议您编写一个简单的应用程序/脚本来完成此任务,然后您只需点击该应用程序上的“运行”按钮即可。
该应用程序可以:
- 总是从特定的“模板”文件夹复制。 - 自动导航到新解决方案,或者更好的做法是为您打开新的解决方案?
如果您需要帮助,请回复。

这就是我们的做法。VS解决方案和项目变得越来越复杂,混合了源代码控制信息等等,如果我们只是从一个地方复制到另一个地方,这些都可能会出现问题或者造成混乱。因此,我编写了脚本来清理这个混乱,并且它们可以满足各种不同的需求(例如将发布版本与源代码控制隔离并将其存档为独立的解决方案)。 - Mordachai
是的,也许编写脚本可以作为一个选项,但即使如此,执行起来也需要比仅复制文件夹多几秒钟的时间。我希望它尽可能少占用时间。我主要使用VS编辑器和调试器,使用单个文件中的代码,并希望有一个模板可供我轻松复制,这个模板将被复制数千次。我将多次浏览项目的目录结构,因此我希望它尽可能简单,但仍然利用VS调试器和编辑器的功能。希望这样更好地解释了我的意图。 - Leonid
嗨Leonid,抱歉你的评论没有解释为什么需要这样做。此外,通常执行脚本所需的时间与手动执行操作相比微不足道。通常要求更像是“不能丢失我的代码”,“必须能够回到版本1.2.3.4”,而花费的时间并不那么重要。 - adudley
好的,那么问题的答案是 - 没有办法使用开箱即用的工具快速地制作一个简单的项目副本(如问题所定义)。显然,可以编写脚本来复制该项目。 - Leonid

3

复制整个文件夹在 /projects 中,例如 C:\Users\Username\Documents\Visual Studio 2010\Project\ProjectName 到另一个位置,例如您的桌面并在那里打开它。这将保留项目文件正在寻找的目录和文件结构。我个人经常备份整个项目目录,并且我从未遇到过任何将旧的项目文件夹复制到其他地方的问题。


谢谢,但这在Visual Studio 2010中不起作用(在之前的版本中起作用)。如问题上面的图像所示,出现错误消息。看起来需要一个包含项目创建的父项目文件夹。 - Leonid
1
看一下我列出的目录结构,我让你复制的文件夹是整个解决方案的父文件夹。顺便说一句,它是可行的。 - johnathan
是的,如果那是一个父文件夹,它会有效果,但对我而言这并不是理想的解决方案。我不想复制父文件夹,因为这实际上每次都会创建一个不必要的文件夹。我想避免每次打开其中一个复制项目时要经过另一个文件夹的复杂性。 - Leonid
1
你在创建项目时做错了。下次取消“为解决方案创建目录”选项。当然,只有你知道自己在做什么的情况下才这样做。 - Hans Passant
当创建项目时,未选中“为解决方案创建目录”复选框,请参见上面问题中的链接。如果选中了该复选框,则会导致出现两个不必要的传递文件夹。有一个解决方案文件夹必须创建解决方案的文件夹概念和一个项目文件夹。通过取消复选框,您可以摆脱项目文件夹,并在解决方案目录中创建项目文件,这仍然留下其他2个文件夹 - 我希望出于问题的原因只有一个。 - Leonid

1

虽然我知道 OP 想要单步解决方案,但通常情况下,将 VS2010 C++ 项目复制到解决方案中的另一个项目是一个三步骤的过程。

  1. 将整个项目文件夹复制到另一个文件夹中,并在 Windows 资源管理器中正确地重命名文件夹
  2. 在重命名后的文件夹中重命名项目文件
  3. 在 VS 2010 的同一解决方案中,选择“添加”->“现有项目”->打开重命名后的项目文件

希望这可以帮助到您。


0

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