如何用Visual Studio解决方案/项目中的新GUID替换所有现有GUID



我有一个用C#和C++开发的Windows应用程序,所以它有多个.cs和.cpp文件。现在,许多.cs文件的GUID格式如下:

[Guid("D01A42F5-FD89-4c8f-8065-726AD4363411"(]

我的项目中有大量的GUID。现在我正在将当前的32位应用程序升级到64位,所以不希望两个应用程序都有相同的GUID。

是否可以在不手动的情况下替换所有GUID?我知道这些选项工具-->创建GUID,但对于这种情况,我需要在所有这些类文件中手动替换它。

编辑:以下两个条目与稍后安装的应用程序发生冲突并被覆盖。

计算机\HKEY_CLASSES_ROOT\namespacedll\CLSID

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\namespacedll\CLSID

是否可以在不手动的情况下替换所有GUID?

没有。

我也不明白为什么这是一个问题。32和64位通常不交互,所以除非你能通过示例或文档链接来说明问题,否则在我看来,这就像";繁忙的工作"-创造了大量无需的工作。

我个人的方法是创建一个应用程序来读取每个项目文件,用regex将每个GUID匹配/替换为新生成的GUID。

您可以采取一种更简单的方法,即不太可能产生重复,即使用regex替换来交换和移位部分现有GUID值。

所以你可以把所有的东西都和这个匹配:

([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])-([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])-4([0-9A-F])([0-9A-F])([0-9A-F])-([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])-([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])

然后用转换/交换的版本替换它:

$31$1$30$2$29$3$28$4-$27$5$26$6-4$25$7$24-$8$23$9$22-$10$21$11$20$12$19$13$18$14$17$15$16

请注意,这只适用于版本4的GUID,因为我们需要静态的4版本标识符。还要注意,它实际上并没有生成新的GUID;它只是重新安排了现有的。它采用最后一个字符,然后是第一个字符,再是倒数第二个字符,依此类推。好处是,一旦应用转换,当前相同的所有GUID值将彼此相同。

示例

最新更新