是否有用于检测具有重复 GUID 的 Visual Studio 项目的工具?

Posted

技术标签:

【中文标题】是否有用于检测具有重复 GUID 的 Visual Studio 项目的工具?【英文标题】:Is there a tool for detecting Visual Studio projects with duplicate GUIDs? 【发布时间】:2009-10-16 09:27:32 【问题描述】:

创建新的 Visual Studio C++ 项目时,有两种方法:运行向导,然后痛苦地更改项目中的所有必要设置,或者只是复制现有项目,重命名那里的所有内容并将文件添加到其中。

第二个变体很好,除了 .vcproj 文件存储了项目 GUID。当两个或多个项目位于一个解决方案中时,此 GUID 用于跟踪项目依赖项和启动项目。如果一个解决方案中的任何两个项目具有相同的 GUID,则可能会出现问题 - 依赖项会丢失,并且启动项目会在下次重新加载解决方案时重置。

显然需要一种工具来扫描文件系统子树并在此处检测具有相同 GUID 的项目。在我开始写之前……有现成的工具吗?

【问题讨论】:

或者更好...一个允许复制视觉工作室项目并修复所有 guid、名称和位置的工具 由于 GUID 是唯一的,您可以安全地对所有复制的文件进行搜索和替换。如果它看起来像项目 GUID,它项目 GUID。 所以这就是我的解决方案中发生的事情,有十五个复制的解决方案...当我想在一个项目中搜索某些东西(查找所有引用)时,结果我得到了一个搜索结果我所有的项目......我猜这个识别解决方案中每个项目的 GUID 是罪魁祸首。我现在遇到了这个问题,差不多一年后,实际上并没有搜索它:) 很好。 【参考方案1】:

您可以相对较快地编写该工具。我已经为我的雇主这样做了,但他们对代码很吝啬。使用正则表达式时,检测 GUID 是“容易的”。

    扫描目录结构以查找感兴趣的文件。将它们的路径保存在内存列表中。

    打开每个文件,将全部内容读入内存。

    使用您创建的正则表达式查找所有 GUID。

    对于遇到的每个 GUID,检查您是否已经在字典中找到了替换 GUID - 字典将旧 GUID 映射到新 GUID。

      如果您已有替换,请替换文本中 Guid 的所有实例。

      如果您没有替换,请生成一个,将其存储在字典中,然后用新的替换所有实例。

    写入文件的更改内容。

这就是它的长处和短处。我希望这会有所帮助。

【讨论】:

【参考方案2】:

您可以尝试使用此工具。它旨在合并/重新定位解决方案,但作为奖励,它可以跨多个解决方案/项目检测和重新生成重复的 guid。

http://code.google.com/p/merge-solutions/

【讨论】:

以上是关于是否有用于检测具有重复 GUID 的 Visual Studio 项目的工具?的主要内容,如果未能解决你的问题,请参考以下文章

安全地解决 Wix 中的重复组件 GUID

ASP.NET中GUID

检测特定文本框是不是有焦点[重复]

将具有重复键的 2 个字典与 linq 合并

是否有任何工具可以检测 Visual C++ 6.0 上的缓冲区溢出? [关闭]

Visual Studio 中用于分析冻结问题的工具