【问题标题】:Copying a project in Visual Studio 2010在 Visual Studio 2010 中复制项目
【发布时间】:2012-01-12 19:29:33
【问题描述】:

Visual Studio 2010 中是否有一种简单的复制项目的方法?

将带有项目的文件夹复制到不同的路径并打开它会导致以下错误。

我只对不会涉及超过1个简单操作的解决方案感兴趣。我正在创建一个简单的控制台项目,我将要复制数百次,而不是真正喜欢进入设置并在每次需要完成如此简单的事情时重复多个步骤。

我正在使用 Visual C++ Express 2010。请注意下面的项目结构。我将它创建为一个 Empty Project 并向其中添加了 1 个单个文件 main.cpp

项目是使用settings 创建的。

资源管理器中的项目看起来像this

有一个复制项目功能,但这意味着不止1个手动操作:

  • 打开旧项目;
  • 按菜单上的复制;
  • 关闭旧项目;

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

请注意,在创建项目时未选中为解决方案创建目录,请参见上面的链接。如果选中此项,将导致 2 个不必要的直通文件夹。有一个解决方案文件夹创建解决方案的文件夹和一个项目文件夹。通过取消选中该复选框,您将摆脱项目文件夹,并在解决方案目录中创建项目文件,但仍然保留其他 2 个 - 由于上述原因,我想要一个。

【问题讨论】:

  • 您是否“硬编码”了项目中的任何路径?如果您使用相对路径和项目/解决方案路径的变量,应该没有问题。并且好奇>“我正在创建一个简单的控制台项目,我将要复制数百次”为什么?
  • 是main.cpp在同一个文件夹还是在.sln路径的子文件夹中?
  • 如果您多次制作同一种项目,不妨考虑将其创建为项目模板 (C#) 或向导 (C++) msdn.microsoft.com/en-us/library/96xz4cw2.aspx
  • 我在创建 新项目 时确实对项目路径进行了硬编码(请参阅更新问题中的链接)。有什么办法可以避免这条硬编码路径?
  • 模板对我来说不是最好的解决方案,因为从模板创建项目比复制文件夹更复杂(打开 Visual Studio,浏览菜单以从模板创建项目)。我想我接下来会尝试,但我宁愿坚持复制文件夹。

标签: c++ visual-studio-2010 copy


【解决方案1】:

将 /projects 中的整个文件夹,例如 C:\Users\Username\Documents\Visual Studio 2010\Project\ProjectName 复制到另一个位置,例如您的桌面并在那里打开它。这会保留项目文件正在查找的目录和文件结构。我个人经常备份我的整个项目目录,而且我从来没有遇到过复制比当前项目文件夹更旧的问题。

【讨论】:

  • 谢谢,但这不适用于 Visual Studio 2010(用于以前的版本)。收到上述问题中图片中的错误消息。看起来它需要一个在其中创建项目的父项目文件夹。
  • 查看我列出的目录结构,我告诉你要复制的文件夹是整个解决方案的父文件夹。顺便说一句,它确实有效。
  • 是的,如果它是父文件夹,它会起作用,但这对我来说不是理想的解决方案。我不想复制父文件夹,因为它每次都会有效地创建一个不必要的文件夹。当我想打开一个复制的项目时,我想避免每次在另一个文件夹中导航的复杂性。
  • 好吧,你在创建项目时做错了。下次取消选中“为解决方案创建目录”选项。当然,前提是您知道自己在做什么。
  • Create directory for solution 在创建项目时未选中,请参阅上述问题中的链接。如果选中此项,将导致 2 个不必要的直通文件夹。有一个解决方案文件夹必须创建解决方案的文件夹和一个项目文件夹。通过取消选中该复选框,您摆脱了 project folder 并在解决方案目录中创建了项目文件,这仍然留下了其他 2 个 - 由于问题中的原因,我想要一个。
【解决方案2】:

您似乎有一些通常不存在的奇怪要求,例如没有额外的文件夹、仅通过 1 个简单的操作进行复制等。

我建议为您编写一个简单的应用程序/脚本来执行此操作,然后您只需在该应用程序上单击“运行”即可。

该应用可以

始终从特定的“模板”文件夹复制。 自动将资源管理器导航到新解决方案,或者更好的是,为您打开新解决方案?

如果您需要帮助,请回复。

【讨论】:

  • 我们就是这样做的。 VS 解决方案和项目变得越来越复杂,混入了源代码控制信息等等,如果我们只是从一个地方复制到另一个地方,这些都会破坏或弄得一团糟。因此,我编写了脚本来清理这些混乱,它们会为各种不同的目的(例如将发布版本与源代码控制隔离并将其归档为独立的解决方案)做我们需要的事情
  • 是的,也许可以选择编写脚本,但即便如此,执行也需要几秒钟的时间,然后只需复制一个文件夹即可。我希望它尽可能少花时间。我主要将 VS 编辑器和调试器与单个文件中的代码一起使用,并且希望有一个可以轻松复制的模板开始,并且该模板将被复制数千次。我将多次浏览项目的目录结构,所以我希望它尽可能简单,但仍然使用 VS 调试器和编辑器的强大功能。希望它能更好地解释意图。
  • 您好 Leonid,抱歉您的评论没有解释为什么您需要这样做。此外,与手动执行操作相比,执行脚本的时间通常可以忽略不计。通常要求更像是“不能丢失我的代码”,“必须能够取回 1.2.3.4 版本”,所花费的时间并不那么重要。
  • 好的,所以问题的答案是 - 无法使用开箱即用的工具快速制作项目的简单副本(如问题中所定义)。显然,可以编写一个脚本来复制项目。
【解决方案3】:

错误提示找不到“c:\user\admin\dropbox\training@uva\volumes\train@uva\void_template\main.cpp”

http://dl.dropbox.com/u/33457177/Screenshots/void_template_2011-12-04_22-15-51.png

显示您将 main.cpp 放在“c:\user\admin\dropbox\training@uva\void_template\”中

路径不同

所以检查.vcxproj文件,找到什么的,可能是配置错误

【讨论】:

    【解决方案4】:

    如果您可以只复制 vcxproj 文件本身,那就太好了——但您不能。问题是项目文件包含一个在 Visual Studio 中全局唯一标识该项目的 GUID;在内部,项目通常由它们的 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 复制工具。
    • 此信息不正确。如果 Visual Studio 已有具有相同 GUID 的不同项目,则在将项目添加到 Visual Studio 解决方案时,它会自动更改项目的 GUID。因此,您可以在资源管理器中毫无问题地复制项目文件夹。
    • BertR:我个人遇到过 Visual Studio 不这样做的问题,在编辑配置设置时会导致严重的错误(这可能是 VS2003 或 VS2005,不确定)。我没有在以后的版本中尝试过,所以你可能是对的,至少对于较新的 VS 版本。无论如何,了解 GUID 问题是件好事,因为从 VS2010 开始,解决方案文件仍然使用 GUID 来引用项目文件,因此任何完全自动化的解决方案都必须处理这个问题。
    【解决方案5】:

    虽然我了解 OP 想要单步解决方案,但一般来说,将 VS2010 C++ 项目复制到解决方案中的另一个项目是三步过程。

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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2012-08-28
      • 2016-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      相关资源
      最近更新 更多