DJ

Diogo Júnior11/11/2025 17:41
Compartilhe

🚀 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.cs e o Setup.cs nã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ção
    • Startup.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. 🚀

    Compartilhe
    Comentários (1)
    DIO Community
    DIO Community - 12/11/2025 09:45

    Excelente, Diogo! Que artigo cirúrgico, essencial e de altíssimo valor prático! Você abordou a transição do ASP.NET Core para o modelo Minimal API e a morte do Startup.cs — um dos erros de migração mais comuns ao atualizar projetos antigos.

    É fascinante ver como você transformou um erro de compilação (The type or namespace name 'Startup' could not be found) em uma lição de arquitetura moderna.

    Qual você diria que é o maior desafio para um desenvolvedor ao trabalhar com um projeto que usa o padrão MVC, em termos de manter a separação de responsabilidades e de evitar o acoplamento entre as três camadas, em vez de apenas focar em fazer a aplicação funcionar?