Кажется, что этот избыточный синтаксис является одной из причуд, требуемых MSBuild для распознавания зависимости проекта:
Похоже, что Visual Studio сохраняет зависимости двумя способами, только один из которых читаетсяот MSBuild.Я вижу, что, поскольку я все еще могу указывать зависимости в графическом интерфейсе, скопировать решение на другую машину и собрать его с VS в правильном порядке.- Виктор Сергиенко
Что касается , почему требуется это "лишнее утверждение уравнения", кажется, что назначение руководства проекта дляего собственный guid - это обходной путь для проблемы с MSBuild 4.0, из-за которой MSBuild не распознает или не реагирует на определенные зависимости проекта, перечисленные в файле решения (.sln), или строит зависимости вне порядка.
испорченный синтаксис "{x} = {x}", о котором вы спрашиваете, является разновидностью стандартного синтаксиса MSBuild для ссылки на проект (например, ответ @ Sergio).
По-видимому, встраивание объявления зависимостив блоке ProjectSection в сочетании с одноименным GUID зависимости заставляет MSBuild изменить порядок сборки зависимого проекта, но фактически не добавляет к нему другую ссылку.
Есть обсуждение в Microsoft Connect , где обсуждается этот обходной путь.В нем Дэн из Microsoft предлагает более четкое решение этой проблемы MSBuild во втором посте на странице, а также упоминает исправление, о котором вы спрашиваете:
Однако вы можете создать ссылку на проект.что только [влияет] на порядок сборки без [на самом деле] добавления ссылки [любая среда выполнения].[Изменить зависимых .csproj
или .vbproj
, чтобы выглядеть следующим образом;обратите внимание на элемент метаданных:
<ProjectReference Include="... foo.csproj">
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
[...] Это исправляет порядок, поскольку теперь LibraryProject будет ожидать CodeGeneratingProject, но в противном случае его сборка не будет затронута.Я могу привести в порядок, удалив также зависимость в файле решения - убрав эти строки, которые теперь не нужны:
ProjectSection(ProjectDependencies) = postProject
{B79CE0B0-565B-4BC5-8D28-8463A05F0EDC} = {B79CE0B0-565B-4BC5-8D28-8463A05F0EDC}
EndProjectSection
, и все равно работает нормально.