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 o 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 arquivo executável específico da plataforma por padrão. Aplicativos dependentes de estrutura podem ser criados sem um arquivo executável e esses aplicativos são multiplataforma.
Quando um arquivo executável é produzido, você pode especificar a plataforma de destino com um RID (identificador de runtime). Para obter mais informações sobre RIDs, consulte Catálogo de RID do .NET.
A tabela a seguir descreve os comandos usados para publicar um aplicativo como dependente de estrutura ou autossuficiente, por versão do SDK:
Tipo | SDK 2.1 | SDK 3.1 | SDK 5.0 | SDK 6.0 | 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> --self-contained false |
|
binário multiplataforma dependente de estrutura. | ✔️ | ✔️ | ✔️ | ✔️ | dotnet publish |
arquivo executável autônomo. | ✔️ | ✔️ | ✔️ | ✔️ | dotnet publish -r <RID> |
Para obter mais informações, consulte Comando dotnet publish do .NET.
Produzir um arquivo executável
Os arquivos executáveis não são multiplataforma. Eles são específicos de um sistema operacional e 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. Os aplicativos publicados como dependentes da estrutura não incluem o runtime e as bibliotecas do .NET; somente o aplicativo e as dependências de terceiros estão incluídos.
Os seguintes comandos produzem um arquivo executável:
Tipo | SDK 2.1 | SDK 3.1 | SDK 5.0 | SDK 6.0 | 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> --self-contained false |
|
arquivo executável autônomo. | ✔️ | ✔️ | ✔️ | ✔️ | dotnet publish -r <RID> |
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 recebe o nome do 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 efetuar roll forward. Para obter mais informações, consulte roll forward de aplicativos dependentes de estrutura.
O comando a seguir produz um binário multiplataforma:
Tipo | SDK 2.1 | SDK 3.x | SDK 5.0 | SDK 6.0 | Comando |
---|---|---|---|---|---|
binário multiplataforma dependente de estrutura. | ✔️ | ✔️ | ✔️ | ✔️ | dotnet publish |
Publicar dependente de estrutura
Os aplicativos publicados como dependentes de estrutura são multiplataforma e não incluem o runtime do .NET. O usuário do seu aplicativo deve 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. Para obter mais informações sobre RIDs, consulte Catálogo de RID do .NET.
Importante
O SDK 2.1 do .NET não produz arquivos executáveis específicos da plataforma quando você publica um aplicativo dependente de estrutura.
O binário multiplataforma do seu aplicativo pode ser executado com o comando dotnet <filename.dll>
e em qualquer plataforma. Se o aplicativo usar um pacote NuGet que tenha implementações específicas da plataforma, todas as dependências das plataformas serão copiadas para a pasta de publicação junto com o aplicativo.
Você pode criar um arquivo executável para uma plataforma específica passando os parâmetros -r <RID> --self-contained false
para o comando dotnet publish
. Quando o parâmetro -r
é omitido, um arquivo executável é criado para sua plataforma atual. Todos os pacotes NuGet que têm dependências específicas da plataforma para a plataforma de destino são copiados para a pasta de publicação. Se você não precisar de um arquivo executável específico da plataforma, poderá especificar <UseAppHost>False</UseAppHost>
no arquivo de projeto. Para obter mais informações, consulte a Referência do MSBuild para projetos do SDK do .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.Plataforma cruzada
Seu aplicativo e qualquer biblioteca baseada em .NET é executada em outros sistemas operacionais. Não é necessário 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 runtime corrigido mais recente
O aplicativo usa o runtime mais recente (dentro da família principal-secundária de destino do .NET) instalado no sistema de destino. 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 poderá ser executado somente se a versão do .NET que seu aplicativo visa já estiver instalada no sistema host. Você pode configurar o comportamento de roll-forward para o aplicativo 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 .NET, o que a maioria dos aplicativos faz. Você pode configurar como seu aplicativo usa as versões mais recentes do .NET. Para obter mais informações, consulte roll forward de aplicativos dependentes de estrutura.
A desvantagem a seguir só se aplica ao SDK do .NET Core 2.1.
- Use o comando
dotnet
para iniciar o aplicativo
Os usuários devem executar o comandodotnet <filename.dll>
para iniciar o aplicativo. O SDK do .NET Core 2.1 não produz arquivos executáveis específicos da plataforma para aplicativos que dependem da estrutura publicada.
Exemplos
Publicar um aplicativo dependente de estrutura multiplataforma. Um arquivo executável direcionado à plataforma atual é criado junto com o arquivo dll.
dotnet publish
Publicar um aplicativo dependente de estrutura multiplataforma. Um arquivo executável de 64 bits do Linux é criado junto com o arquivo dll. Esse comando não funciona com o SDK do .NET Core 2.1.
dotnet publish -r linux-x64 --self-contained false
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 .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 aplicativo não precisa baixar e instalar o .NET.
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. Na publicação 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 que contém 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 o aplicativo.Direcionamento específico da plataforma
Como você precisa publicar seu aplicativo para cada plataforma, você sabe onde ele será executado. Se o .NET introduzir uma nova plataforma, os usuários não poderão executar o aplicativo nessa plataforma até que você libere uma versão direcionada a ela. 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 necessário para disco rígido são maiores do que uma versão dependente de estrutura.Dica
Você pode reduzir o tamanho da sua implantação em sistemas Linux em aproximadamente 28 MB usando o modo invariável de globalização do .NET. Isso força o 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 o aplicativo) só pode ser atualizado liberando uma nova versão do aplicativo. No entanto, o .NET atualizará patches de segurança críticos conforme necessário para a biblioteca de estruturas no computador em que seu aplicativo é executado. Você é responsável pela validação de ponta a ponta para esse cenário de patch de segurança.
Exemplos
Publique um aplicativo autônomo. Um arquivo executável de 64 bits do macOS é criado.
dotnet publish -r osx-x64
Publique um aplicativo autônomo. Um arquivo executável de 64 bits do Windows é criado.
dotnet publish -r win-x64
Publicar com imagens ReadyToRun
A publicação com imagens ReadyToRun melhorará o tempo de inicialização do aplicativo aumentando o tamanho do aplicativo. Para publicar com ReadyToRun, consulte ReadyToRun para obter mais detalhes.
Vantagens
- Tempo de inicialização aprimorado
O aplicativo gastará menos tempo executando o JIT.
Desvantagens
- Tamanho maior
O aplicativo será maior no disco.
Exemplos
Publique um aplicativo autônomo e ReadyToRun. Um arquivo executável de 64 bits do macOS é criado.
dotnet publish -c Release -r osx-x64 -p:PublishReadyToRun=true
Publique um aplicativo autônomo e ReadyToRun. Um arquivo executável de 64 bits do Windows é criado.
dotnet publish -c Release -r win-x64 -p:PublishReadyToRun=true