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ção | Namespace Final |
|---|---|
| Arquivo sem namespace explícito | Root Namespace + pastas (namespace físico) |
| Arquivo com namespace explícito | O namespace lógico definido no arquivo |
| Projeto moderno (SDK-style) sem RootNamespace definido | O 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.