Compartilhar via


Visão geral da publicação de aplicativos .NET

Os aplicativos criados com o .NET podem ser publicados em dois modos diferentes e o modo afeta a forma como um usuário executa seu aplicativo.

A publicação do seu aplicativo como autossuficiente produz um aplicativo que inclui o runtime e as bibliotecas do .NET, bem como seu aplicativo e as respectivas dependências. Os usuários do aplicativo podem executá-lo em um computador que não tenha o runtime do .NET instalado.

A publicação do seu aplicativo como dependente de estrutura produz um aplicativo que inclui apenas o próprio aplicativo e suas dependências. Os usuários do aplicativo precisam instalar separadamente o runtime do .NET.

Ambos os modos de publicação produzem um executável específico da plataforma por padrão. Aplicativos dependentes da estrutura podem ser criados sem um executável e esses aplicativos são multiplataforma.

Quando um executável é produzido, você pode especificar a plataforma de destino com um RID (identificador de runtime). Para obter mais informações sobre RIDs, consulte .NET RID Catalog.

A tabela a seguir descreve os comandos usados para publicar um aplicativo como dependente de estrutura ou autossuficiente:

Tipo Comando
arquivo executável dependente de estrutura para a plataforma atual. dotnet publish
arquivo executável dependente de estrutura para uma plataforma específica. dotnet publish -r <RID>
binário dependente de estrutura. dotnet publish
arquivo executável autossuficiente. dotnet publish -r <RID> --self-contained

Para obter mais informações, consulte Comando dotnet publish do .NET.

Produzir um arquivo executável

Os executáveis não são multiplataforma, são específicos para um sistema operacional e uma arquitetura de CPU. Ao publicar seu aplicativo e criar um arquivo executável, você pode publicar o aplicativo como autossuficiente ou dependente de estrutura. A publicação de um aplicativo como autossuficiente inclui o runtime do .NET com o aplicativo e seus usuários não precisam instalar o .NET antes de executá-lo. A publicação de um aplicativo como dependente da estrutura não inclui o runtime do .NET; somente o aplicativo e as dependências de terceiros estão incluídos.

Os seguintes comandos produzem um executável:

Tipo Comando
arquivo executável dependente de estrutura para a plataforma atual. dotnet publish
arquivo executável dependente de estrutura para uma plataforma específica. dotnet publish -r <RID>
arquivo executável autossuficiente. dotnet publish -r <RID> --self-contained

Produzir um binário multiplataforma

Binários multiplataforma são criados quando você publica seu aplicativo como dependente de estrutura na forma de um arquivo dll. O arquivo dll é nomeado em homenagem ao seu projeto. Por exemplo, se você tiver um aplicativo chamado word_reader, um arquivo chamado word_reader.dll será criado. Os aplicativos publicados dessa forma são executados com o comando dotnet <filename.dll> e podem ser executados em qualquer plataforma.

Binários multiplataforma podem ser executados em qualquer sistema operacional, desde que o runtime do .NET de destino já esteja instalado. Se o runtime do .NET de destino não estiver instalado, o aplicativo poderá ser executado usando um runtime mais recente se o aplicativo estiver configurado para roll-forward. Para obter mais informações, consulte roll forward de aplicativos dependentes de estrutura.

Você pode optar por executar o aplicativo como um executável específico da plataforma ou como um binário multiplataforma por meio de dotnet comando. Não deve haver nenhuma diferença de comportamento do aplicativo ao iniciar o executável específico da plataforma em comparação com o comando dotnet para aplicativos de servidor comuns iniciando por meio de um executável específico da plataforma oferece uma melhor integração com o sistema operacional subjacente. Por exemplo:

O comando a seguir produz um binário multiplataforma:

Tipo Comando
binário multiplataforma dependente de estrutura. dotnet publish

Publicar dependente de estrutura

Os aplicativos publicados como dependentes da estrutura são multiplataforma e não incluem o runtime do .NET. O usuário do seu aplicativo precisa instalar o runtime do .NET.

A publicação de um aplicativo como dependente de estrutura produz um binário multiplataforma como um arquivo dll e um arquivo executável específico da plataforma direcionado à plataforma atual. A dll é multiplataforma enquanto o arquivo executável não é. Por exemplo, se você publicar um aplicativo chamado word_reader e direcionar ao Windows, um arquivo executável word_reader.exe será criado junto com word_reader.dll. Ao direcionar para o Linux ou macOS, um arquivo executável word_reader é criado junto com word_reader.dll. Se o aplicativo usar um pacote NuGet que tenha implementações específicas de plataforma, as dependências de todas as plataformas serão copiadas para a pasta publish\runtimes\{platform}.

O binário multiplataforma do seu aplicativo pode ser executado com o comando dotnet <filename.dll> e pode ser executado em qualquer plataforma.

Específico da plataforma e dependente de estrutura

Você pode publicar um aplicativo dependente da estrutura que seja específico da plataforma passando os parâmetros -r <RID> para o comando dotnet publish. Publicar dessa forma é o mesmo que publicar dependente de estrutura, exceto pelo fato de que as dependências específicas da plataforma são tratadas de forma diferente Se o aplicativo usar um pacote NuGet que tenha implementações específicas da plataforma, somente as dependências da plataforma de destino serão copiadas. Essas dependências são copiadas diretamente para a pasta publicar.

Embora tecnicamente o binário produzido seja multiplataforma, ao direcionar para uma plataforma específica, não há garantia de que seu aplicativo funcione em várias plataformas. Você pode executar dotnet <filename.dll>, mas o aplicativo pode falhar quando tentar acessar dependências específicas da plataforma que estão ausentes.

Para mais informações sobre RIDs, consulte Catálogo de RID .NET.

Vantagens

  • Implantação pequena.
    Somente seu aplicativo e suas dependências são distribuídos. O runtime e as bibliotecas do .NET são instalados pelo usuário e todos os aplicativos compartilham o runtime.

  • Multiplataforma
    Seu aplicativo e qualquer biblioteca baseada em .NET são executados em outros sistemas operacionais. Você não precisa definir uma plataforma de destino para seu aplicativo. Para obter informações sobre o formato de arquivo .NET, consulte Formato de Arquivo do Assembly .NET.

  • Usa o tempo de execução corrigido mais recente
    O aplicativo usa o tempo de execução mais recente (dentro da família de versões principais e secundárias do .NET) instalado no sistema alvo. Isso significa que seu aplicativo usa automaticamente a versão mais recente corrigida do runtime do .NET. Esse comportamento padrão pode ser substituído. Para obter mais informações, consulte roll forward de aplicativos dependentes de estrutura.

Desvantagens

  • Requer a pré-instalação do runtime
    Seu aplicativo só poderá ser executado se a versão do .NET que seu aplicativo tem como alvo já estiver instalada no sistema host. Você pode configurar o comportamento roll-forward para o aplicativo para exigir uma versão específica do .NET ou permitir uma versão mais recente do .NET. Para obter mais informações, consulte roll forward de aplicativos dependentes de estrutura.

  • O .NET pode ser alterado
    É possível que o runtime do .NET e as bibliotecas sejam atualizados no computador em que o aplicativo é executado. Em casos raros, isso poderá alterar o comportamento do aplicativo se você usar as bibliotecas do .NET, o que a maioria dos aplicativos faz. Você pode configurar como seu aplicativo usa versões mais recentes do .NET. Para obter mais informações, consulte roll forward de aplicativos dependentes de estrutura.

Exemplos

Publicar um aplicativo como multiplataforma e dependente de estrutura. Um executável voltado para a plataforma atual é criado juntamente com o arquivo dll. Todas as dependências específicas da plataforma são publicadas com o aplicativo.

dotnet publish

Publicar um aplicativo como específico da plataforma e dependente de estrutura. Um executável de 64 bits do Linux é criado junto com o arquivo dll. Somente as dependências da plataforma de destino são publicadas com o aplicativo.

dotnet publish -r linux-x64

Publicar como autossuficiente

A publicação do aplicativo como autossuficiente produz um arquivo executável específico da plataforma. A pasta de publicação de saída contém todos os componentes do aplicativo, incluindo as bibliotecas do .NET e o runtime de destino. O aplicativo é isolado de outros aplicativos .NET e não usa um runtime compartilhado instalado localmente. O usuário do seu aplicativo não precisa baixar e instalar o .NET.

Você pode publicar um aplicativo autossuficiente passando o parâmetro --self-contained para o comando dotnet publish. O binário executável é produzido para a plataforma de destino especificada. Por exemplo, se você tiver um aplicativo chamado word_reader e publicar um arquivo executável autossuficiente para Windows, um arquivo word_reader.exe será criado. Ao publicar para Linux ou macOS, um arquivo word_reader é criado. A plataforma e a arquitetura de destino são especificadas com o parâmetro -r <RID> para o comando dotnet publish. Para obter mais informações sobre RIDs, consulte Catálogo de RID do .NET.

Se o aplicativo tiver dependências específicas da plataforma, como um pacote NuGet contendo dependências específicas da plataforma, elas serão copiadas para a pasta de publicação junto com o aplicativo.

Vantagens

  • Controlar a versão do .NET
    Você controla qual versão do .NET é implantada com seu aplicativo.

  • Direcionamento específico da plataforma
    Como você precisa publicar seu aplicativo para cada plataforma, você sabe onde seu aplicativo é executado. Se o .NET introduzir uma nova plataforma, os usuários não poderão executar seu aplicativo nessa plataforma até que você libere uma versão direcionada a essa plataforma. Você pode testar seu aplicativo para problemas de compatibilidade antes que os usuários executem seu aplicativo na nova plataforma.

Desvantagens

  • Implantações maiores
    Como seu aplicativo inclui o runtime do .NET e todas as dependências do aplicativo, o tamanho do download e o espaço no disco rígido necessários são maiores do que uma versão dependente do framework .

    Dica

    Você pode reduzir o tamanho da implantação em sistemas Linux em aproximadamente 28 MB usando o modo invariável de globalização do .NET . Isso força seu aplicativo a tratar todas as culturas como a cultura invariável.

    Dica

    O corte IL pode reduzir ainda mais o tamanho da implantação.

  • É mais difícil atualizar a versão do .NET
    O Runtime do .NET (distribuído com seu aplicativo) só pode ser atualizado liberando uma nova versão do seu aplicativo.

Exemplos

Publique um aplicativo autossuficiente. Um executável de 64 bits do macOS é criado.

dotnet publish -r osx-x64 --self-contained

Publique um aplicativo independente. Um executável de 64 bits do Windows é criado.

dotnet publish -r win-x64 --self-contained

Publicar com imagens do tipo ReadyToRun

A publicação com imagens ReadyToRun melhora o tempo de inicialização do aplicativo aumentando o tamanho do aplicativo. Para obter mais informações, consulte ReadyToRun .

Vantagens

  • tempo de inicialização aprimorado
    O aplicativo gasta menos tempo executando o JIT.

Desvantagens

  • Tamanho maior
    O aplicativo é maior em disco.

Exemplos

Publique um aplicativo autônomo e ReadyToRun. Um executável de 64 bits do macOS é criado.

dotnet publish -c Release -r osx-x64 --self-contained -p:PublishReadyToRun=true

Publique um aplicativo autônomo e ReadyToRun. Um executável de 64 bits do Windows é criado.

dotnet publish -c Release -r win-x64 --self-contained -p:PublishReadyToRun=true

Consulte também