Подтвердить что ты не робот

Вопрос о формате Visual Studio *.sln

Я использую текстовый редактор для редактирования файла *.sln вручную. Я запутался в следующих строках:

Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test2008", "Tools\Test2008\Test2008\Test2008.csproj", "{00B5EBB2-FDA5-4B23-BDC5-27E9F82E7C69}"
    ProjectSection(ProjectDependencies) = postProject
        {82B9BEC0-C9CC-4423-B54F-61E3C4AF53D8} = {82B9BEC0-C9CC-4423-B54F-61E3C4AF53D8}
    EndProjectSection
EndProject

Какая точка этого

{82B9BEC0-C9CC-4423-B54F-61E3C4AF53D8} = {82B9BEC0-C9CC-4423-B54F-61E3C4AF53D8}

утверждение? Это выглядит совершенно излишним.

4b9b3361

Ответ 1

Кажется, что этот избыточный синтаксис является одним из причуд, требуемых MSBuild для распознавания зависимости проекта:

Похоже, что Visual Studio поддерживает зависимостей двумя способами, только один из которых читается MSBuild. я вижу потому что я все еще могу указать зависимостей в графическом интерфейсе, скопируйте решение на другой машине и построить ее с VS в правильный заказ. - Виктор Сергиенко

Что касается того, почему это "выражение избыточного уравнения" требуется, кажется, что назначение руководства по проекту для собственного руководства является обходным решением для проблемы с MSBuild 4.0, которая заставляет MSBuild не распознавать или отвечать на определенные зависимости проектов, перечисленные в (.sln), или для создания зависимостей вне порядка.

Скомпонованный синтаксис "{x} = {x}", о котором вы спрашиваете, представляет собой вариант стандартного синтаксиса MSBuild для ссылки на проект (т.е. пример ответа @Sergio).

По-видимому, включение объявления зависимости в блоке ProjectSection в сочетании с GUID зависимостей с именем пользователя заставляет MSBuild изменять порядок сборки зависимого проекта, но на самом деле не добавляет к нему другую ссылку.

Здесь обсуждается в Microsoft Connect, где обсуждаются эти варианты обхода. В нем Дэн из Microsoft предлагает более эффективный способ обхода этого MSBuild в своем втором сообщении на странице, а также упоминает исправление, о котором вы спрашиваете:

Это исправляет порядок, так как теперь LibraryProject будет ждать CodeGeneratingProject, но его сборка в противном случае не будет затронута. Я могу привести в порядок, удалив зависимость в файле решения, - удалив эти строки, которые теперь не нужны:

ProjectSection(ProjectDependencies) = postProject
    {B79CE0B0-565B-4BC5-8D28-8463A05F0EDC} = {B79CE0B0-565B-4BC5-8D28-8463A05F0EDC}
EndProjectSection

и он все еще работает нормально.

Ответ 2

Строка {82B9BEC0-C9CC-4423-B54F-61E3C4AF53D8} = {82B9BEC0-C9CC-4423-B54F-61E3C4AF53D8} указывает, что проект Test2008 имеет объявленную зависимость (настроенную в диалоговом окне "Зависимости проектов в VStudio" ) проекта с уникальным идентификатором 82B9BEC0-C9CC-4423-B54F-61E3C4AF53D8. Вы должны иметь возможность найти проект с тем же идентификатором в том же файле .sln.

Что касается нечетного синтаксиса строки, у меня нет инсайдерских знаний формата .sln. Однако, основываясь на наблюдении других выводов ProjectSection в .sln файлах, я должен был предположить, что синтаксический анализатор .sln, используемый Visual Studio, исторически предположил, что строки ProjectSection будут в формате key = value, причем ключевая уникальность, применяемая в любом заданном раздел. Я также предположил бы, что люди, которые внедрили функциональность зависимостей проекта, решили, что вместо того, чтобы сбрасывать парсер, было бы проще использовать projectId = projectId для своих строк сечения, поскольку ключи для них бессмысленны, но они гарантированы уникально, если в противном случае применяется только одна зависимость от проекта A к проекту B.

Ответ 3

От MSDN:

Этот оператор содержит уникальный GUID проекта и тип проекта GUID. Эта информация используется для поиска файла проекта или файлы, принадлежащие к решению, и VSPackage, необходимые для каждого проект.

GUID проекта передается IVsProjectFactory для загрузки конкретных VSPackage, связанный с проектом, затем проект загружается VSPackage. В этом случае VSPackage, загружаемый для этого проекта, является Visual Basic.

Например:

Проект ( "{F184B08F-C81C-45F6-A57F-5ABD9991F28F}" ) = "Project1", "Project1.vbproj", "{8CDD8387-B905-44A8-B5D5-07BB50E05BEA}" EndProject

Ответ 4

Линии после ProjectSection(ProjectDependencies) = postProject определяет список зависимостей - от какого проекта зависит. (Можно увидеть в Solution > Properties > Project Dependencies).

Если вы хотите "расшифровать" больше того, что происходит внутри, посмотрите на следующий проект:

https://sourceforge.net/p/syncproj/code/HEAD/tree/

Вот синтаксический анализатор .sln, вы можете проверить Solution.cs, найти "ProjectDependencies".

Клавиша

всегда такая же, как и значение, это какая-то проблема с форматом файла.