项目 GUID 不断变化

35

我们有一个使用VS2008的解决方案,我注意到一些奇怪的情况发生了:

一些项目引用了同一解决方案中定义的其他项目(作为项目引用添加)。这是一段时间前完成的。

从VS直接构建没有问题。

从MSBUILD构建失败。

我已经删除了项目引用并重新添加它,然后我注意到该项目的GUID已更改。现在从MSBUILD构建可以正常工作。

问题是,现在我必须检查所有项目并验证这一点。

此外,我不知道为什么会发生这种情况(为什么项目GUID与以前不同,也不确定这是否会再次发生)。

造成这种情况的原因是什么?


你在运行MSBuild时遇到了哪个错误? - sll
它抱怨缺少类型,因为它无法确定缺失的库。 - lysergic-acid
这可能是由于动态版本号引起的吗? - VMAtm
我不确定为什么会出现这种情况,可能是由于动态版本号引起的。项目GUID并不是项目版本。我也不确定我们是否有动态版本号。 - lysergic-acid
6个回答

36

我也在Visual Studio 2013中遇到了这个问题,而且不需要进行源代码控制的集成。

当我将同一项目放在多个解决方案中,并且每个解决方案为该项目使用不同的GUID并相应地更新项目时,偶尔会出现此问题。解决方法是手动修改 .sln 文件以使它们同步。此答案由Chunsheng Tang提供。

首先用记事本打开解决方案文件(.sln),然后检查项目引用。格式如下:

     # Visual Studio 2005
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsApplication1", "WindowsApplication1\WindowsApplication1.csproj", "{9378D255-CE38-45CD-82FA-A1EBFB86FD6C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassLibrary1", "ClassLibrary1\ClassLibrary1.csproj", "{DE374096-FF44-4FDF-B248-C767039B4175}"
EndProject

每个项目的第二个GUID是指向共享项目的参考。

为了解决这个问题,请为您的共享项目选择一个单一的GUID;确保打开该项目的所有解决方案都有相同的GUID在它们的解决方案文件中。(在进行这些更改之前请备份您的文件)

https://social.msdn.microsoft.com/Forums/en-US/1d632940-cc1d-49d5-a64c-d3e999216cbd/cant-avoid-the-projectguid-from-being-changed-in-csproj-file?forum=csharpide


13

5
解决方案文件从项目文件中获取项目GUID。您是否将解决方案/项目从早期版本的Visual Studio升级了?如果解决方案文件中的GUID不断变化,可能是因为项目文件根本没有GUID,因此每次打开解决方案时,VS都会随意创建一个新的GUID。我认为这是VS升级机制中的一个错误,但没有人问过我。通过像这样在您的项目文件中添加GUID来解决此问题:
  <PropertyGroup>
    <ProjectGuid>{FB0F4A2A-1F78-42BF-8E31-E4FEFDC5565F}</ProjectGuid>
  </PropertyGroup>

再次打开解决方案,让项目GUID最后一次更改为这个新的GUID。GUID将不会再次更改。


4
对我来说,问题在于解决方案文件中的重复GUID。在我的安装程序的.sln文件中,我发现Config项目GUID(到处都用)和Installer项目GUID(特定于解决方案)是相同的。打开解决方案会导致VS更改其中一个项目文件的GUID,但显然不会更改解决方案文件中的GUID。恰好它总是选择共享的GUID,导致最大的困扰。解决方法是为安装程序项目创建一个新的GUID,并手动编辑所有其他解决方案文件以返回Config项目的正确GUID。
我不知道这是如何发生的,因为我从来没有复制项目来创建它们。

0

如果您在同一解决方案中有两个具有相同GUID的项目,则会发生这种情况,VS将为其中一个分配新的GUID。 当构建具有新项目的新解决方案并插入共享项目时,可能会发生这种情况,它们可能具有与新项目相同的GUID。 问题在于,所有其他已经插入共享项目的解决方案都必须再次更改GUID,这非常麻烦。

一个简单的解决方案是不要手动编辑解决方案/项目文件: 只需删除项目,然后首先插入共享项目,然后再插入新项目。因此,VS会为新项目提供新的而不是重复的GUID,并且不需要强制更改共享项目的GUID。

...以上就是“全局唯一标识符”的主题内容了;-)


0
关于解决方法:GUID 可能在解决方案文件 (.sln) 中的多个位置被引用。请记得替换所有对该 GUID 的引用,而不仅仅是解决方法中提到的那一个(解决方法已锁定 - 无法在那里留下评论,因此我必须在此回答此帖子)。

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