🚀 Adeus Startup.cs! Como Corrigir o Erro “The type or namespace name 'Startup' could not be found”
Bom dia, boa tarde ou boa noite a todos os devs que estão empenhados no bootcamp da Avanade, estou aqui mais uma vez trazendo um pouco da minha ajuda.
Durante o desenvolvimento de um projeto de entrega baseado nas aulas de um professor da DIO, criado originalmente em .NET 7, me deparei com o seguinte erro ao tentar atualizar o código para .NET 9:
The type or namespace name 'Startup' could not be found (are you missing a using directive or an assembly reference?)
À primeira vista, parece apenas um erro de referência comum...
Mas na verdade, ele revela uma mudança estrutural profunda nas versões mais recentes do ASP.NET Core: o modelo Minimal API.
Neste artigo, você vai entender:
- 🧠 Por que esse erro acontece
- ⚙️ O que mudou do .NET 7 para o .NET 8 e 9
- 🧰 Como corrigir o problema
- 🚫 Por que o
Startup.cse oSetup.csnão são mais necessários
🕹️ Contexto do erro
O projeto original desenvolvido pelo professor na versão .NET 7 ainda seguia a estrutura tradicional com duas classes principais:
Program.cs— ponto de entrada da aplicaçãoStartup.cs— responsável pela configuração de serviços e middlewares
public class Program
{
public static void Main(string[] args)
=> CreateHostBuilder(args).Build().Run();
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
E o Startup.cs continha as configurações centrais:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// Configurações de injeção de dependência
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// Pipeline de middlewares
}
}
Essa estrutura ainda funcionava bem no .NET 7, mas foi completamente substituída a partir do .NET 8 e 9.
⚠️ O que mudou do .NET 7 para o .NET 9
Com a chegada do .NET 8 e consolidado no .NET 9, a Microsoft finalizou a transição para o modelo Minimal API.
Agora, não existe mais a necessidade (nem suporte oficial) ao arquivo Startup.cs.
Tudo — serviços, middlewares e rotas — fica concentrado em um único arquivo: Program.cs.
Exemplo moderno:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
app.MapGet("/", () => "API rodando com sucesso 🚀");
app.Run();
No novo modelo, o Program.cs substitui o Startup.cs completamente.
Você não precisa mais usar webBuilder.UseStartup<Startup>().
🧠 Por que o erro acontece
Quando você executa ou testa um projeto antigo (por exemplo, migrado de .NET 7 para .NET 9) e ele ainda contém:
webBuilder.UseStartup<Startup>();
ou nos testes:
new WebApplicationFactory<Startup>()
o compilador não encontrará a classe Startup, pois ela foi removida do modelo padrão das novas versões.
Resultado:
❌ The type or namespace name 'Startup' could not be found
🔧 A solução moderna
✅ 1. Centralize tudo no Program.cs
Remova o Startup.cs e coloque toda a configuração no Program.cs:
var builder = WebApplication.CreateBuilder(args);
// Configurações de serviços
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Middlewares
app.UseSwagger();
app.UseSwaggerUI();
// Rotas
app.MapGet("/", () => Results.Json(new { message = "API Ativa 🚀" }));
app.Run();
// Necessário para testes
public partial class Program { }
Esse formato é o padrão oficial do ASP.NET Core desde o .NET 6
e é totalmente compatível com o .NET 9.
🧪 2. Atualize os testes de integração
Antes (no .NET 7):
Setup.http = new WebApplicationFactory<Startup>();
Agora (no .NET 9):
Setup.http = new WebApplicationFactory<Program>();
Exemplo moderno de teste:
[TestClass]
public class ApiTests
{
private readonly WebApplicationFactory<Program> _factory;
public ApiTests()
{
_factory = new WebApplicationFactory<Program>()
.WithWebHostBuilder(builder =>
{
builder.UseEnvironment("Testing");
});
}
[TestMethod]
public async Task Deve_Retornar_Status_200_No_Endpoint_Principal()
{
var client = _factory.CreateClient();
var response = await client.GetAsync("/");
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
}
}
🧰 3. Por que o Setup.cs não é mais necessário
Antigamente, muitos projetos criavam um Setup.cs para configurar o ambiente de teste com WebApplicationFactory<Startup>.
Isso não é mais necessário.
O WebApplicationFactory<Program> já:
- Cria o servidor de teste em memória
- Gerencia o ciclo de vida da aplicação
- Permite injetar serviços de teste com
WithWebHostBuilder
Ou seja: o Setup.cs se tornou redundante.
🧭 Conclusão
A transição do .NET 7 para o .NET 9 trouxe um modelo mais simples, direto e intuitivo.
O antigo Startup.cs foi substituído por uma abordagem mais enxuta: tudo centralizado no Program.cs.
Resumo prático:
- 🚫 Apague o
Startup.cs - ✅ Concentre tudo no
Program.cs - 🔄 Atualize testes para
WebApplicationFactory<Program> - 💡 Não crie mais
Setup.cs
Com isso, você terá uma API moderna, compatível e mais fácil de manter.
💬 Em resumo
💡 Se você encontrou o erro
"The type or namespace name 'Startup' could not be found",é porque está rodando um código antigo (geralmente .NET 7)
em uma versão moderna (.NET 8 ou .NET 9).
A solução? Abandone o Startup.cs.O Program.cs agora é o coração da aplicação ASP.NET Core. ⚙️💻 Código completo de exemplo
👉 Repositório oficial de exemplos Minimal API no GitHub
🏁 Finalizando
Essa transição pode parecer confusa no início, mas é uma evolução natural do ecossistema .NET.
Agora o desenvolvimento é mais rápido, a inicialização mais leve e o código mais limpo.
O Startup.cs teve seu tempo.
Hoje, o Program.cs é o novo centro da aplicação ASP.NET Core. 🚀


