Visual Studio不断更改project.sln文件

时间:2010-11-16 13:07:01

标签: visual-studio version-control projects-and-solutions

我在一个Visual C ++项目团队中工作。在advice之后,我们得到了我们用SCM跟踪项目的.sln文件。事实证明,每次我从我的伙伴那里取消(是的,我们使用git)并在VS中打开解决方案,都会更新.sln文件。正在更新的部分是在以下部分中多次出现的长ID(在本例中以7C44结尾):

    {828CB89E-F092-3B7A-2F8C-62E146587C44}.Debug|Win32.ActiveCfg = Debug|Win32
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.Debug|Win32.Build.0 = Debug|Win32
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.DebugStaticCRT|Win32.ActiveCfg = DebugStaticCRT|Win32
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.DebugStaticCRT|Win32.Build.0 = DebugStaticCRT|Win32
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.Release|Win32.ActiveCfg = Release|Win32
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.Release|Win32.Build.0 = Release|Win32
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.ReleaseStaticCRT|Win32.ActiveCfg = ReleaseStaticCRT|Win32
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.ReleaseStaticCRT|Win32.Build.0 = ReleaseStaticCRT|Win32
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.Template|Win32.ActiveCfg = Template|Win32
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.Template|Win32.Build.0 = Template|Win32

这个数字是什么意思?我们怎样才能让它停止在我们之间改变?

3 个答案:

答案 0 :(得分:29)

在搜索答案时,我很难找到这篇特别的帖子,所以我只是想添加一些关键词和解释,以便更容易找到。感谢Daniel和tgb的精彩回答,我能够解决这个问题,我的团队和我在打开Visual Studio 2010后不再有冲突的解决方案文件(我会投票给他们的答案,但我今天刚加入,还没有足够的声誉点投票答案......)。

所以,以更多方式提出问题: 打开解决方案时,为什么Visual Studio会更改.sln文件为什么.sln文件有本地修改?导致Visual Studio解决方案文件中的合并冲突的原因是什么?

答案:.vcxproj项目文件中很可能不同或缺少ProjectGuid属性会导致本地修改。这可能是因为从以前版本的Visual Studio升级项目,或者只是手动复制项目文件和编辑部分项目。

修复方法是添加以下行:

<ProjectGuid>{###}</ProjectGuid>

(使用解决方案文件中的相应ID代替###)到'PropertyGroup Label =“Globals”'节点中的.vcxproj文件,例如:

  <PropertyGroup Label="Globals">
    <ProjectGuid>{FD0675C0-EC06-E665-4001-12DEE6694605}</ProjectGuid>
    <RootNamespace>MyProject</RootNamespace>
  </PropertyGroup>

否则Visual Studio将为每个项目分配一个新的随机ProjectGuid并更新.sln文件。可以在.sln文件中轻松找到给定项目的“ProjectGuid”:

Project("{<Filter#>}") = "MyProjName", "src\to\Proj.vcxproj", "{<ProjectGuid>}"

答案 1 :(得分:9)

这是Visual Studio用于引用各个项目的GUID。您将在.sln文件的顶部找到相同的GUID,其中定义/导入项目。

Visual Studio从相应的.csproj / .vbproj文件中读取GUID。在那里你应该在顶部附近找到一个带有相应GUID的ProjectGuid属性。如果您和您的伙伴在那里定义了不同的GUID,.sln也将更新。

答案 2 :(得分:6)

我遇到了同样的问题。 我终于注意到它来自一个没有定义其GUID的vcxproj文件。 我在我的vcxproj文件中手动添加了这个GUID:

  <PropertyGroup Label="Globals">
    <ProjectGuid>{D3303AD3-B7E5-48F8-919C-18202ABAEF00}</ProjectGuid>
    <RootNamespace>MyProject</RootNamespace>
    <ProjectName>MyProject</ProjectName>
    <Keyword>MFCProj</Keyword>
  </PropertyGroup>