Структура каталогов для решения .NET

16

Недавно мы посетили подрядчика, который поставил под сомнение нашу методологию структурирования проектов. Обратите внимание, что я специально имею в виду структуру каталогов. Он предложил использовать рекомендации Microsoft. Я подумал, что смогу найти в Google «структуру директорий Microsoft .NET Project каталогов» и найти что-то полезное, однако это оказалось не так. В таком виде мы делаем что-то вроде этого:

[Company.System.Feature]
  |-doc
     |Sandcastle project
  |-lib
     |Nuget packages
  |-src
    |-Project1 e.g. web
    |-Project2 e.g. business logic
    |-UnittestProject1
    |-Specs

Папка doc содержит решение Sandcastle, подобное описанному здесь: https://www.codeproject.com/Articles/15176/Sandcastle-Help-File-Builder (см. Абсолютные и относительные пути). Поэтому папка doc содержит папку Help, в которой содержится сгенерированный файл справки. Папка lib содержит все пакеты Nuget.

Существуют ли какие-либо рекомендации Microsoft, в которых рекомендуется, как структурировать решение? Я посмотрел здесь: /programming/789389/project-structure-for-c-sharp-development-effort/789554?noredirect=1#comment86756309_789554 среди других мест. Кажется, что большинство статей и вопросов, которые я прочитал, созданы в 2007-2009 гг. Я считаю, что Nuget был представлен в 2010 году. Существуют ли какие-либо рекомендации Microsoft? Я читал о чем-то, что называется Tree Surgeon, но, похоже, этого больше не существует: https://archive.codeplex.com/?p=treesurgeon .

Я использую TFS; Круиз-контроль и DDD это то, что имеет значение.

w0051977
источник
4
Структура каталогов - это дело вкуса. Используйте структуру папок, которая наиболее четко определяет намерения вашего проекта / организации.
Роберт Харви
5
Кроме того, в следующий раз, когда кто-то скажет, что вы должны что-то соблюдать «Руководства Microsoft», попросите этого человека предоставить эти рекомендации или показать, где их можно найти. В противном случае это бесполезный совет.
Роберт Харви
2
Странный бит помещает пакеты nuget в lib вместо пакетов
Ewan
1
@Ewan, пакеты nuget больше не принадлежат packages, для проектов в стиле dotnetcore и VS2017. Сейчас они живут в objкаталогах проектов .
Дэвид Арно,
2
пфф! модернизация?!?!? Похоже, это может сломать вещи
Ewan

Ответы:

20

На MSDN есть очень старые официальные правила . Они устарели, хотя. Как говорится на странице: « Этот контент устарел и больше не поддерживается. Он предоставляется в качестве любезности лицам, которые все еще используют эти технологии». Поэтому я рекомендую вам избегать этих рекомендаций.

Была предпринята попытка определить общую структуру решения с помощью Project Scaffold . Это больше ориентировано на F #, а не на C #. Это действительно не взлетело, хотя и есть небольшие признаки развития идей в эти дни.

Наиболее активный и актуальный набор руководств поддерживается Дэвидом Фаулером, разработчиком Microsoft в команде ASP.NET. Эти рекомендации используются многими в Microsoft, включая команды Roslyn (компилятор C # и VB.Net). Поэтому вы могли бы сделать намного хуже, чем принять такой подход.

Дэвид Арно
источник
Я видел первые две ссылки, но не третью. +1 за третью ссылку. Поместил бы я весь свой проект Sandcastle в папку docs или только файлы справки, сгенерированные проектом Sandcastle? Не уверен, почему этот ответ был отклонен.
w0051977
1
Справедливости ради следует отметить, что каждая страница, которая не включена в новую систему документации Microsoft, снабжена надписью «этот контент устарел и больше не поддерживается». Это не значит, что там нет полезной информации.
Роберт Харви
Были бы вы поставить спецификации? В папке Tests или в каталоге с именем Specs (в том же каталоге, что и папка src)? Я думаю, это не имеет большого значения.
w0051977
@RobertHarvey: Достаточно справедливо, но ссылка на эту страницу в одиночку, не имеющая ничего для ее резервного копирования, также не является причиной для изменения структуры папки проекта, если уже была создана другая.
Флатер
Руководства Дэвида Фаулера можно увидеть на практике в большинстве проектов с открытым исходным кодом на GitHub, например, в Enity Framework .
Pfx