đ 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. đ



