IIS: Como Hospedar Aplicação .NET Core em 10 Passos

Disponível também em inglês

Se você começou a desenvolver em .NET Core e não pode abandonar seu host Windows, então você precisa saber como configurá-lo no IIS. Siga esses passos e corra pro abraço.

Como Hospedar Aplicação .NET Core no IIS

Desenvolver em .NET Core não é tão diferente assim como desenvolver com .NET, mas configurar o IIS para rodar uma aplicação .NET Core… ah… é preciso passar por algumas pegadinhas.

Tentarei ser o mais claro e objetivo possível para que nada saia errado. Para esse artigo, usarei como código fonte de apoio a solução utilizada em .NET Core para Desenvolvedores .NET. Para baixar o código fonte de apoio clique aqui.


# Instalações na máquina Windows

Passo 01: Antes de tudo é necessário instalar o .NET Core Runtime. Para este artigo utilizei a versão 2.2 que pode ser baixada aqui. Ele é necessário para uma aplicação .NET Core funcionar. Pode ser necessário reiniciar a máquina.

DESIGN PATTERNS vol.1 - Programação no Mundo Real - Fabio Silva Lima

Passo 02: A próxima instalação é o .NET Core Windows Server Hosting bundle. E que esse sim serve para rodar uma aplicação .NET Core no IIS. Sem isso, senta e chora. Será necessário reiniciar a máquina.

Como Hospedar Aplicação .NET Core no IIS


# Alterações no projeto web .NET Core

Passo 03: Abra o arquivo FSL.NetCoreBasics.Mvc.csproj e altere a tag de configuração AspNetCoreHostingModel para AspNetCoreHostingModelV2.

<AspNetCoreHostingModelV2>InProcess</AspNetCoreHostingModelV2>

Ao realizar essa alteração, será necessário restaurar o Pacote NuGet e recompilar a aplicação.

Eu apoio Fabio Silva Lima


# Alterações no código C#

Passo 04: Com o projeto aberto no Visual Studio, abra o arquivo Program.cs, localize o método Main e configure-o conforme abaixo.

public static void Main(string[] args)
{
var host = new WebHostBuilder()
       	.UseKestrel()
             .UseContentRoot(Directory.GetCurrentDirectory())
             .UseIISIntegration()
             .UseStartup<Startup>()
             .Build();
 	host.Run();
 }

Você pode apagar o método CreateWebHostBuilder pois ele não será mais necessário.

Passo 05: Agora abra o arquivo Startup.cs, localize o método ConfigureServices e acrescente o bloco de código abaixo.

services.Configure<IISOptions>(options =>
{
options.AutomaticAuthentication = false;
});


# Inclusão do arquivo web.config

Passo 06: É… caro(a) colega, é preciso criar o arquivo web.config para poder hospedar a aplicação .NET Core no IIS. Copie e cole o código abaixo.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <add name="aspNetCore" 
                 path="*" 
                 verb="*" 
                 modules="AspNetCoreModule" 
                 resourceType="Unspecified"/>
        </handlers>
        <aspNetCore processPath="%LAUNCHER_PATH%" 
                    arguments="%LAUNCHER_ARGS%" 
                    stdoutLogEnabled="false" 
                    stdoutLogFile=".\logs\stdout" 
                    forwardWindowsAuthToken="false"/>
    </system.webServer>
</configuration>

Agradecimento especial ao Macoratti por esse bloco de código do web.config.


# Configuração no IIS

O próximo passo é configurar um Pool de aplicações e diretório virtual (ou web site) no IIS para rodar a aplicação do .NET Core.

Passo 07: Abra o IIS e crie um Pool de Aplicativos como Sem código gerenciado. Deixe a opção de Modo pipeline gerenciado como Integrado e dê um nome sugestivo como DotNetCore.

Como Hospedar Aplicação .NET Core no IIS

Passo 08: Crie uma pasta onde sua aplicação .NET Core ficará hospedada (por exemplo C:\inetpub\wwwroot\FSL.NetCoreBasics.Mvc) e crie um diretório virtual para ela (por exemplo FSL.NetCoreBasics.Mvc). Selecione o Pool de Aplicativos DotNetCore criado anteriormente.

Como Hospedar Aplicação .NET Core no IIS


# Publicação no IIS

Passo 09: Abra seu projeto no Visual Studio, clique com botão direito do mouse no projeto e escolha a opção Publish. Selecione a guia lateral Folder, coloque o caminho físico utilizado anteriormente e clique em Publish.

Como Hospedar Aplicação .NET Core no IIS

Abra o Windows Explorer e vá na pasta publicada. Você vai ver que todas as DLLs e web.config ficam na raiz e front-end em uma pasta wwwroot.

Como Hospedar Aplicação .NET Core no IIS


# Testando a aplicação

Passo 10: Abra o navegador e digite http://localhost/FSL.NetCoreBasics.Mvc, sua aplicação .NET Core será aberta, rodando no IIS.

Como Hospedar Aplicação .NET Core no IIS

Faltou alguma coisa? Encontrou erro?
Comente, critique, compartilhe!

Obrigado e até a próxima!


# Referências:

stackify | stackoverflow | microsoft | macoratti

Sobre o Autor:
Trabalha como arquiteto de soluções e desenvolvedor, tem mais de 18 anos de experiência em desenvolvimento de software em diversas plataformas sendo mais de 16 anos somente para o mercado de seguros.
Revisado por:
Apaixonado por tecnologia, atualmente trabalho com aplicações web e estou aprofundando meu conhecimento em mobile. Meu objetivo é contribuir com a comunidade ajudando os desenvolvedores que estão iniciando.


Estudante de Desenvolvimento de Jogos Digitais na PUC-SP, Estagiário na Broker, Consultoria e Soluções em TI. Amo trabalhar com informática, tanto no desenvolvimento de Software assim como hardware e montagem de computadores, Modelador Profissional e Game Designer


  • tiagoavila

    Boa tarde Fábio, parabéns pelo post, a alguns dias precisei publicar uma api feita em .NET Core 2.1 em uma vm na AWS com Windows Server 2019 e tive que vasculhar em vários sites pra conseguir publicar, com certeza vai ajudar muita gente.

    No meu caso, eu fiz alguns passos a menos que você.
    – Após habilitar o IIS na VM, eu instalei apenas o .NET Core Windows Server Hosting

    – Eu não alterei o método Main da classe Program.cs, pois o CreateDefaultBuilder já executa os métodos do passo 4, conforme explicado aqui.

    – Eu fiz a publicação conforme você fez também.

    – Criei a aplicação no IIS também utilizando um pool Sem Código gerenciado.

    – Último coisa que tive que fazer foi alterar o processPath da tag aspNetCore para o caminho do executável do .Net core, assim:


    Vi que você utilizou no processPath o valor “%LAUNCHER_PATH%”, creio que assim fique melhor do que a forma que fiz, pois a cada publicação tenho que me atentar para não sobrescrever o web.config desnecessariamente.

    Espero que este comentário ajude outras pessoas também.

    E mais uma vez, parabéns pelo post!

    • E ai @tiagoavila:disqus blz! obrigado pelo comentário, é com esses comentários que me faz prosseguir contribuindo. Eu quando precisei publicar uma aplicação .NET Core no IIS, encontrei diversos artigos na internet dizendo coisas diferentes e não continham todas as partes necessárias. O que funcionou pra mim foi o que eu escrevi. Só foi possivel alterando uma tag do .csproj para V2. Abraço e até a proxima 🙂

  • Christian Lima

    Ótimo artigo, Fábio!
    É possível hospedar uma aplicação .Net Core fora do IIS? Se sim, quais outros tipos de servidores podem ser utilizados?