Compilando uma aplicação .NET Core em um runtime específico

Neste post vou explicar como fazer para o .NET Core compilar uma aplicação em um runtime específico detalhando os runtimes desejados no project.json.

Em um post anterior (Criando um projeto .NET Core usando a linha de comando e o Visual Studio Code) eu expliquei como criar uma aplicação simples. Vou usar esse mesmo projeto neste post.

Ao abrir o arquivo project.json temos a seguinte configuração:

{
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable",
    "emitEntryPoint": true
  },
  "dependencies": {},
  "frameworks": {
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.1"
        }
      },
      "imports": "dnxcore50"
    }
  }
}

Para uma aplicação .NET Core em um runtime específico devemos remover o atributo “type”: “platform” das dependences dentro das especificações dos frameworks, neste caso, netcoreapp1.0.

Nesse projeto só é preciso fazer isso na dependência Microsoft.NETCore.App. O atributo vai ficar como o código abaixo.

        "Microsoft.NETCore.App": {
          "version": "1.0.1"
        }

O próximo passo é adicionar o atributo runtimes ao arquivo project.json. O atributo runtimes define para quais runtimes o projeto deve ser compilado. A documentação oficial possui uma lista de runtimes disponíveis através da explicação do .NET Core Runtime IDentifier (RID).

Neste caso, vou usar o Windows 10. Para isso é preciso informar no arquivo project.json o identificador do runtime desejado como win10-x64.

Por fim, o arquivo project.json vai ficar da seguinte maneira:

{
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable",
    "emitEntryPoint": true
  },
  "dependencies": {},
  "frameworks": {
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "version": "1.0.1"
        }
      },
      "imports": "dnxcore50"
    }
  },
  "runtimes": {
    "win10-x64": {}
  }
}

Agora, ao usar o comando dotnet restore seguido do dotnet build a compilação gerada será especificamente para Windows 10 e estará no caminho \bin\Debug\netcoreapp1.0\win10-x64.

Quando o projeto é compilado para um runtime específico ele possibilita usar o comando dotnet publish. Ele copia o executável, as DLLs e o framework para um diretório publish dentro do diretório do runtime especificado. Neste caso, \bin\Debug\netcoreapp1.0\win10-x64\publish.

É possível notar que agora, dentro do diretório publish, temos o nosso executável e todas as DLLs necessárias, inclusive as do .NET Core, como mostra a imagem abaixo:

Captura de Tela 2016-12-07 às 22.53.36.png

Com isso feito, é possível executar a aplicação em qualquer computador com Windows 10, mesmo que ele não tenha o .NET Core instalado.

O código completo do projeto está no GitHub, basta clicar aqui para vê-lo.

Se quiserem conhecer mais sobre mim, basta ir aqui no blog no menu quem sou e conferir também o meu LinkedIn.

Se ficou alguma dúvida, comenta aqui no blog que eu tento ajudar. 🙂

 

Deixe um comentário