Проекты часто разбиты на папки, и обычно ожидается, что эти папки будут сопоставлены с пространствами имен кода. Однако во многих моих основных проектах у меня есть классы, которые я объединил в существующие пространства имен - например, у меня есть справочная библиотека MVC, которая добавляет дополнительные типы в System.Web.Mvc
или System.ComponentModel.DataAnnotations
, например.
В других проектах у меня может быть набор интерфейсов и набор реализаций этих интерфейсов по умолчанию; поэтому я мог бы разбить файлы кода на две отдельные папки (например, «Объекты» и «Интерфейсы»), но я не хочу иметь подпространства имен Objects
и Interfaces
.
Точно так же я часто пишу методы расширения для типов в других библиотеках - например, System.String
, который я объединяю с пространством имен System
, поэтому они уже «там», как только вы ссылаетесь на сборку.
Итак, учитывая структуру проекта, подобную этой (в ответ на первый ответ, этот проект предназначен для создания одной сборки со всеми пространствами имен; и это может быть dll, которая может быть подписана):
Our.Core.Library
|->System
| |->StringExtensions.cs
|->System.Web.Mvc
| |->AnotherModelBinder.cs
|->OurCoreClass.cs
Выше я хочу, чтобы новые файлы, добавленные в корень, находились в пространстве имен Our.Core.Library
, но я хочу, чтобы новые файлы, добавленные в папки System и System.Web.Mvc, находились в System
и System.Web.Mvc
соответственно. Но VS даст им пространство имен по умолчанию Our.Core.Library.System
.
Это небольшая проблема, но я бы хотел иметь возможность переопределить пространство имен по умолчанию для конкретной папки кода, чтобы я мог управлять им. Есть идеи как этого добиться? Я пробовал пустое пространство имен по умолчанию для проекта, что могло бы логически заставить его работать для подпапок, но, очевидно, не для корня; однако страница свойств VS не принимает пустое пространство имен.
В идеале это было бы решение, которое я мог бы легко воспроизвести во всей нашей команде разработчиков, чтобы другие разработчики могли добавлять файлы кода, в то же время придерживаясь структуры пространства имен, заданной на этапе проектирования / планирования.