Visual Studio不断更改project.sln文件

Jon*_*han 17 version-control projects-and-solutions visual-studio

我在Visual C++项目的团队中工作.根据我们的建议,我们使用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
Run Code Online (Sandbox Code Playgroud)

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

Dev*_*ams 29

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

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

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

修复是添加行:

<ProjectGuid>{###}</ProjectGuid>
Run Code Online (Sandbox Code Playgroud)

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

  <PropertyGroup Label="Globals">
    <ProjectGuid>{FD0675C0-EC06-E665-4001-12DEE6694605}</ProjectGuid>
    <RootNamespace>MyProject</RootNamespace>
  </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

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

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

  • 另外,我补充说,缺少`<ProjectGuid>`属性的一个可能原因是从VC6转换项目. (5认同)

Dan*_*ose 9

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

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

  • 我看到同样的问题,但这似乎不适用于我.我对.vcxproj和.sln文件进行了更改并检入了所有文件.我尝试通过将整个项目下载到新位置来测试它.在新位置,当我打开解决方案文件并且项目很乱时,GUID会被更改!我仍在试图弄清楚如何解决这个问题.我正在使用VS2010 (3认同)

小智 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>
Run Code Online (Sandbox Code Playgroud)