Skip to main content

Root namespace | CSharp

  • Root namespace | CSharp

📌 1. O que é o Root Namespace

O Root Namespace é a configuração que define o namespace base do projeto. Ele funciona como um prefixo automático aplicado quando um arquivo não declara um namespace explicitamente.

Em muitos projetos, especialmente anteriores ao .NET 6, o Visual Studio configurava esse valor automaticamente com o nome do projeto.


🛠️ 2. Onde é configurado

No Visual Studio:

Project → Properties → Application → Default Namespace

Em projetos SDK-style (.NET Core / .NET 6+):

Se não definido, o Root Namespace será o nome do projeto. Pode ser alterado manualmente no .csproj:

<PropertyGroup>
<RootNamespace>MinhaAplicacao</RootNamespace>
</PropertyGroup>

🧩 3. Como ele funciona

3.1 Quando o arquivo NÃO tem namespace declarado

Supondo:

  • Root Namespace = MinhaAplicacao
  • Arquivo dentro da pasta Services

O Visual Studio gerará:

namespace MinhaAplicacao.Services
{
public class EmailService { }
}

O namespace é construído a partir:

Root Namespace + Estrutura de Pastas

3.2 Quando o arquivo declara namespace

Exemplo:

namespace App.Custom.Services
{
public class EmailService { }
}

Neste caso, o Root Namespace não interfere. O namespace declarado substitui completamente o padrão.


📁 4. Root Namespace Lógico e Físico

Esses dois conceitos ajudam a entender como o namespace final é formado.

4.1 Root Namespace Físico

Representa o namespace derivado automaticamente da estrutura de pastas quando nenhum namespace explícito existe.

Exemplo de estrutura:

Projeto/
Services/
Controllers/
UserController.cs

Com Root Namespace = MinhaAplicacao, o namespace resultante será:

MinhaAplicacao.Services.Controllers

Isso acontece somente se o arquivo não tiver namespace próprio.


4.2 Root Namespace Lógico

É o namespace declarado explicitamente no código.

Exemplo:

namespace Empresa.Projetos.Contas
{
public class UserController { }
}

Ele:

  • ignora o Root Namespace
  • ignora a estrutura de pastas
  • representa a intenção arquitetural do desenvolvedor

4.3 Relação entre os dois

SituaçãoNamespace Final
Arquivo sem namespace explícitoRoot Namespace + pastas (namespace físico)
Arquivo com namespace explícitoO namespace lógico definido no arquivo
Projeto moderno (SDK-style) sem RootNamespace definidoO nome do projeto é usado como Root Namespace

Em resumo:

Namespace lógico (se existir) > Namespace físico (se não existir lógico)

📄 5. Root Namespace no .NET 6+ e File-Scoped Namespace

Projetos modernos frequentemente usam:

namespace MinhaAplicacao.Services;

O comportamento permanece:

  • Se você declarar o namespace → Root Namespace não é usado.
  • Se você NÃO declarar → o namespace será gerado usando o Root Namespace + pastas.

📝 6. Resumo Final

  • O Root Namespace é a base de todos os namespaces gerados automaticamente.
  • Se o arquivo declarar um namespace, ele substitui o padrão.
  • O namespace físico é derivado da estrutura de pastas.
  • O namespace lógico é o definido no código.
  • O namespace lógico sempre prevalece.
  • Em projetos modernos, o Root Namespace existe, mas é menos visível.