.NET publicação de visão geral

As aplicações que cria com .NET podem ser publicadas em dois modos diferentes, e o modo afeta a forma como um utilizador executa a sua aplicação.

A publicação da sua aplicação como independente produz uma aplicação que inclui o tempo de execução e bibliotecas .NET, bem como a sua aplicação e as suas dependências. Os utilizadores da aplicação podem executá-la numa máquina que não tenha o tempo de funcionamento .NET instalado.

A publicação da sua app como dependente de quadros produz uma aplicação que inclui apenas a sua própria aplicação e as suas dependências. Os utilizadores da aplicação têm de instalar separadamente o tempo de funcionamento .NET.

Ambos os modos de publicação produzem uma plataforma específica executável por padrão. As aplicações dependentes do quadro podem ser criadas sem uma executável, e estas aplicações são inter-plataforma.

Quando um executável é produzido, pode especificar a plataforma-alvo com um identificador de tempo de execução (RID). Para obter mais informações sobre rids, consulte o Catálogo .NET RID.

O quadro que se segue descreve os comandos utilizados para a publicação de uma aplicação como dependente do quadro ou autossuficiente, por versão SDK:

Tipo SDK 2.1 SDK 3.1 SDK 5.0 SDK 6.0 Comando
quadro dependente executável para a plataforma atual. ✔️ ✔️ ✔️ dotnet publish
executável dependente de quadros para uma plataforma específica. ✔️ ✔️ ✔️ dotnet publish -r <RID> --self-contained false
binário de plataforma dependente de quadros. ✔️ ✔️ ✔️ ✔️ dotnet publish
autossuficiente executável. ✔️ ✔️ ✔️ ✔️ dotnet publish -r <RID>

Para obter mais informações, consulte o comando de publicação .NET dotnet.

Produzir um executável

Executáveis não são inter-plataforma. São específicos de um sistema operativo e arquitetura cpu. Ao publicar a sua aplicação e criar uma aplicação executável, pode publicar a aplicação como independente ou dependente de quadros. A publicação de uma aplicação como independente inclui o tempo de execução .NET com a app, e os utilizadores da aplicação não têm de se preocupar em instalar .NET antes de executar a aplicação. As aplicações publicadas como dependentes do quadro não incluem o tempo de funcionamento e bibliotecas .NET; apenas a app e as dependências do terceiro terceiro partido estão incluídas.

Os seguintes comandos produzem um executável:

Tipo SDK 2.1 SDK 3.1 SDK 5.0 SDK 6.0 Comando
quadro dependente executável para a plataforma atual. ✔️ ✔️ ✔️ dotnet publish
executável dependente de quadros para uma plataforma específica. ✔️ ✔️ ✔️ dotnet publish -r <RID> --self-contained false
autossuficiente executável. ✔️ ✔️ ✔️ ✔️ dotnet publish -r <RID>

Produzir um binário transversal

Os binários de plataforma cruzada são criados quando publica a sua app como dependente de quadros, sob a forma de um ficheiro dll . O ficheiro dll tem o nome do seu projeto. Por exemplo, se tiver uma aplicação com o nome word_reader, é criado um ficheiro com o nomeword_reader.dll . As aplicações publicadas desta forma são executadas com o dotnet <filename.dll> comando e podem ser executadas em qualquer plataforma.

Binários de plataformas cruzadas podem ser executados em qualquer sistema operativo, desde que o tempo de funcionamento .NET já esteja instalado. Se o tempo de execução .NET direcionado não for instalado, a aplicação poderá ser executada utilizando um tempo de execução mais recente se a aplicação estiver configurada para avançar. Para obter mais informações, consulte as aplicações dependentes do quadro.

O seguinte comando produz um binário transversal:

Tipo SDK 2.1 SDK 3.x SDK 5.0 SDK 6.0 Comando
binário de plataforma dependente de quadros. ✔️ ✔️ ✔️ ✔️ dotnet publish

Publicar quadro-dependente

As aplicações publicadas como dependentes do quadro são inter-plataforma e não incluem o tempo de execução .NET. O utilizador da sua aplicação é obrigado a instalar o tempo de funcionação .NET.

Publicar uma aplicação como dependente de quadros produz um binário transversal como um ficheiro dll , e um executável específico da plataforma que visa a sua plataforma atual. O dll é transversal enquanto o executável não é. Por exemplo, se publicar uma aplicação chamada word_reader e Windows-alvo, é criada uma word_reader.exe executável juntamente com word_reader.dll. Ao direcionar o Linux ou o macOS, é criado um word_reader executável juntamente com word_reader.dll. Para obter mais informações sobre rids, consulte o Catálogo .NET RID.

Importante

.NET SDK 2.1 não produz executáveis específicos da plataforma quando publica uma aplicação dependente do quadro de aplicações.

O binário transversal da sua aplicação pode ser executado com o dotnet <filename.dll> comando, e pode ser executado em qualquer plataforma. Se a aplicação utilizar um pacote NuGet que tenha implementações específicas da plataforma, todas as dependências das plataformas são copiadas para a pasta de publicação juntamente com a aplicação.

Pode criar um executável para uma plataforma específica, passando os -r <RID> --self-contained false parâmetros para o dotnet publish comando. Quando o -r parâmetro é omitido, um executável é criado para a sua plataforma atual. Quaisquer pacotes NuGet que tenham dependências específicas da plataforma para a plataforma específica são copiados para a pasta de publicação. Se não precisar de uma execução específica da plataforma, pode especificar <UseAppHost>False</UseAppHost> no ficheiro do projeto. Para mais informações, consulte a referência MSBuild para projetos .NET SDK.

Vantagens

  • Pequena implantação
    Apenas a sua aplicação e as suas dependências são distribuídas. O tempo de funcionação e as bibliotecas .NET são instalados pelo utilizador e todas as aplicações partilham o tempo de execução.

  • Plataforma transversal
    A sua aplicação e qualquer um. A biblioteca baseada na NET funciona em outros sistemas operativos. Não precisa de definir uma plataforma-alvo para a sua aplicação. Para obter informações sobre o formato de ficheiro .NET, consulte o formato de ficheiro de montagem .NET.

  • Utiliza o último tempo de execução remendado
    A aplicação utiliza o mais recente tempo de execução (dentro da família principal-menor de .NET) instalada no sistema alvo. Isto significa que a sua aplicação utiliza automaticamente a versão mais recente corrigida do tempo de execução .NET. Este comportamento predefinido pode ser ultrapassado. Para obter mais informações, consulte as aplicações dependentes do quadro.

Desvantagens

  • Requer pré-instalação do tempo de execução
    A sua aplicação só pode ser executada se a versão de .NET os seus alvos de aplicação já estiverem instalados no sistema de anfitriões. Pode configurar o comportamento de avanço para a aplicação para exigir uma versão específica de .NET ou permitir uma versão mais recente de .NET. Para obter mais informações, consulte as aplicações dependentes do quadro.

  • .NET pode mudar
    É possível que o tempo de funcionação e as bibliotecas .NET sejam atualizados na máquina onde a aplicação é executada. Em casos raros, isso pode alterar o comportamento da sua app se utilizar as bibliotecas .NET, o que a maioria das aplicações fazem. Pode configurar como a sua aplicação utiliza versões mais recentes de .NET. Para obter mais informações, consulte as aplicações dependentes do quadro.

A seguinte desvantagem aplica-se apenas a .NET Core 2.1 SDK.

  • Use o dotnet comando para iniciar a aplicação
    Os utilizadores devem executar o dotnet <filename.dll> comando para iniciar a sua aplicação. .NET Core 2.1 SDK não produz executáveis específicos da plataforma para aplicações publicadas dependentes do quadro.

Exemplos

Publique uma aplicação inter-plataforma dependente do quadro. Um executável que direcione a sua plataforma atual é criado juntamente com o ficheiro dll .

dotnet publish

Publique uma aplicação inter-plataforma dependente do quadro. Um Linux de 64 bits é criado juntamente com o ficheiro dll . Este comando não funciona com .NET Core SDK 2.1.

dotnet publish -r linux-x64 --self-contained false

Publicar autossuficiente

Publicar a sua aplicação como independente produz uma plataforma específica executável. A pasta de publicação de saída contém todos os componentes da aplicação, incluindo as bibliotecas .NET e o tempo de execução do alvo. A aplicação está isolada de outras aplicações .NET e não utiliza um tempo de execução partilhado instalado localmente. O utilizador da sua aplicação não é obrigado a descarregar e instalar .NET.

O binário executável é produzido para a plataforma-alvo especificada. Por exemplo, se tiver uma aplicação com o nome word_reader e publicar um executável independente para Windows, é criado um ficheiro word_reader.exe. A publicação para Linux ou macOS, é criado um ficheiro word_reader . A plataforma-alvo e a arquitetura são especificadas com o -r <RID> parâmetro para o dotnet publish comando. Para obter mais informações sobre rids, consulte o Catálogo .NET RID.

Se a aplicação tiver dependências específicas da plataforma, como um pacote NuGet que contenha dependências específicas da plataforma, estas são copiadas para a pasta de publicação juntamente com a aplicação.

Vantagens

  • Versão Control .NET
    Controla qual versão de .NET é implementada com a sua aplicação.

  • Segmentagem específica da plataforma
    Como tem de publicar a sua aplicação para cada plataforma, sabe onde a sua aplicação vai funcionar. Se .NET introduzir uma nova plataforma, os utilizadores não podem executar a sua aplicação nessa plataforma até que lance uma versão direcionada para essa plataforma. Pode testar a sua aplicação para problemas de compatibilidade antes que os seus utilizadores executem a sua aplicação na nova plataforma.

Desvantagens

  • Implementações maiores
    Como a sua aplicação inclui o tempo de funcionamento .NET e todas as dependências da sua aplicação, o tamanho de descarregamento e o espaço de disco rígido necessário é maior do que uma versão dependente do quadro .

    Dica

    Pode reduzir o tamanho da sua implementação nos sistemas Linux em aproximadamente 28 MB utilizando o modo invariante de globalização .NET. Isto força a sua app a tratar todas as culturas como a cultura invariante.

    Dica

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

  • Mais difícil de atualizar a versão .NET
    .NET Runtime (distribuído com a sua aplicação) só pode ser atualizado através da libertação de uma nova versão da sua aplicação. No entanto, .NET atualizará patches de segurança críticos conforme necessário para a biblioteca-quadro na máquina em que a sua aplicação é executado. Você é responsável pelo fim da validação final para este cenário de patch de segurança.

Exemplos

Publique uma aplicação autossuficiente. É criado um macOS de 64 bits.

dotnet publish -r osx-x64

Publique uma aplicação autossuficiente. É criado um executável de 64 bits de Windows.

dotnet publish -r win-x64

Publicar com imagens ReadyToRun

A publicação com imagens ReadyToRun irá melhorar o tempo de arranque da sua aplicação, à custa do aumento do tamanho da sua aplicação. Para publicar com ReadyToRun consulte ReadyToRun para mais detalhes.

Vantagens

  • Tempo de arranque melhorado
    A aplicação passará menos tempo a gerir o JIT.

Desvantagens

  • Tamanho maior
    A aplicação será maior no disco.

Exemplos

Publique uma aplicação autossuficiente e ReadyToRun. É criado um macOS de 64 bits.

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

Publique uma aplicação autossuficiente e ReadyToRun. É criado um executável de 64 bits de Windows.

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

Ver também