Visual Studio постоянно меняет файл project.sln

Я работаю в команде по проекту Visual С++. Следуя советам, мы получили, что мы отслеживаем файл .sln проекта с нашим SCM. Оказывается, каждый раз, когда я вытягиваю из своего партнера (да, мы используем git) и открываем решение в VS, файл .sln обновляется. Обновляемая часть - это длинный идентификатор, который появляется несколько раз (в этом случае заканчивается 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

Что означает это число? Как мы можем перестать меняться между нами?

Ответ 1

Это GUID, который Visual Studio использует для обозначения отдельных проектов. Вы найдете тот же GUID в верхней части .sln файла, где проекты определены/импортированы.

Visual Studio считывает идентификатор GUID из соответствующего файла .csproj/.vbproj. Там вы должны найти свойство ProjectGuid возле вершины с соответствующим GUID. Если у вас и вашего партнера есть другой идентификатор GUID, указанный там, также будет обновлен .sln.

Ответ 2

Мне было трудно найти этот конкретный пост при поиске ответа, поэтому я просто хотел добавить несколько ключевых слов и объяснений, чтобы облегчить их поиск. Благодаря фантастическим ответам Даниэля и tgb я смог решить эту проблему, и у моей команды у меня больше нет противоречивых файлов решений после открытия Visual Studio 2010 (я бы проголосовал за их ответы, но я только что присоединился к сегодняшнему дню и еще не получил достаточно очков репутации, чтобы проголосовать за ответы...).

Итак, чтобы задать вопрос еще несколькими способами: Почему Visual Studio меняет файлы .sln при открытии решения? Почему файлы .sln имеют локальные модификации? или Что вызывает конфликты слияния в файлах решений Visual Studio?

Ответ. Скорее всего, другой или отсутствующий атрибут ProjectGuid в файле проекта .vcxproj приведет к локальным изменениям. Это может быть связано с обновлением проектов из предыдущих версий Visual Studio или просто с ручного копирования файла проекта и редактирования его частей.

Исправление состоит в том, чтобы добавить строку:

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

(с соответствующим идентификатором из файла решения вместо ###) в файл .vcxproj в "PropertyGroup Label =" Globals "'node, например:

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

В противном случае Visual Studio просто назначит новый случайный ProjectGuid для каждого проекта и обновит файл .sln. "ProjectGuid" можно легко найти для данного проекта в файле .sln:

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

Ответ 3

У меня была такая же проблема. Я наконец заметил, что это произошло из файла vcxproj, который не определил его GUID. Я вручную добавил этот GUID в свой файл vcxproj:

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