Одной из законных причин наличия конфликтующих пространств имен может быть использование собственных библиотек, написанных для более ранних версий .Net, которые не содержали функциональности, добавленной в более поздних версиях. Например, в .Net 1.1 дней я написал класс Registry, который обернул вызовы реестра API. По чистой случайности названия методов, которые я выбрал, были точно такими же, как и в более позднем классе .Net Registry, и они делали точно такие же вещи, поэтому было легко отключить мой доморощенный код. Для более сложных вещей может пригодиться возможность использовать более старый, плохо названный кусок кода с квалификатором global::
.
Умышленное присвоение имени новому коду с использованием существующего пространства имен .Net, безусловно, будет запахом кода.