Ответ 1
Dirs.proj - это соглашение MSBuild, обычно используемое при работе с очень большими исходными деревьями ( > 20 проектов). Я работал с инженерами Microsoft в предыдущей компании, и соглашение dirs.proj похоже на то, что Microsoft разработала и использует внутренне для управления очень большими деревьями-источниками.
Очень хорошей ссылкой для реализации является проект Python Tools for Visual Studio в CodePlex.
Ссылка которую вы поделили Сайедом Ибрагимом Сашими, является очень хорошим объяснением аргументации парадигмы msbuild, но она не очень хорошо показывает практический пример того, как это работает. Проект Python Tools является выдающейся ссылкой для этого.
Идея использования этой парадигмы проста. Я бы предпочел, чтобы большинство разработчиков программного обеспечения .NET работали над проектами с ограниченным масштабом, которые не занимаются более чем 5-10 проектами одновременно, и управляют этими проектами в Visual Studio через файлы решений (.sln), Они могут даже поручить своей системе сборки запускать сборки на .sln. Это прекрасно работает, пока вы не начнете думать о масштабировании вашего продукта или его объединении с чем-то большим, например, с платформой со многими, многими проектами. Файлы решений не являются файлами MSBuild и, как таковые, они не расширяемы, как MSBuild, и они подвергаются серьезным штрафам за производительность при работе с большим количеством проектов.
С точки зрения MSBuild, dirs.proj поддерживает файлы Visual Studio.sln. Разница, однако, заключается в том, что dirs.proj не просто включают .csproj(и тому подобное) как .sln, скорее, они могут включать в себя исходные поддеревья (например, другие вложенные dirs.proj). Таким образом, создание корня dirs.proj может привести к созданию всего дерева исходных текстов или построению вложенного dirs.proj приведет к созданию этого поддерева.
Поэтому парадигма побуждает вас взглянуть на ваш источник как на серию взаимозависимых узлов, организованных в функции или области продуктов. Таким образом, инженеры могут работать с разными исходными поддеревами в очень больших проектах без необходимости иметь дело со всем исходным деревом, как это было бы с решением VS.
Использование этой парадигмы также несет определенные преимущества, которые не связаны с .sln файлами. Например, если один проект ссылается на проект из другого, отдельного поддерева, msbuild будет создавать эту ссылку сначала автоматически. Кроме того, ваши исходные узлы могут иметь свои собственные настройки сборки, позволяя им динамически строить, используя разные параметры сборки на основе сценария сборки. Например, по одному сценарию для источника данных SharePoint требуется упаковка WSP, поддерево С# должно быть построено без .pdb, поддерево DB должно генерировать dacpacs, и все дерево исходных текстов должно подписать свои сборки с помощью myCorp.snk и установить сборку вывод в каталог $(buildRoot)\Output.
dirs.proj не открывается через визуальную студию - они построены на командной строке с использованием msbuild. Единственная причина боли в том, что файлы должны быть обработаны вручную.
Итак, длинный ответ коротко взгляните на проект Python Tools и посмотрите, как они используют dirs.proj. Обратите внимание, как все дерево исходных текстов имеет общие настройки, управляемые Common.Build.settings, и как свойства msbuild в этом файле .settings используются в различных файлах .csproj.