Algumas aplicações necessitam que as plataformas utilizadas sejam instaladas nas máquinas hosts. Exemplos disso são o Java Virtual Machine e o .NET Framework. Se você já programou para estas plataformas, sabe que a aplicação pode requerer que o .NET ou JVM estejam instalados para que ela rode.
Esse comportamento pode ser contornado criando-se uma aplicação self-contained. Aplicações self-contained, são as que já contêm o ambiente necessário para que ela seja executada.
Neste artigo veremos como criar uma aplicação self-contained com o .NET Core.
Curso C# (C Sharp) - Introdução ao ASP.NET Core
Conhecer o cursoCriando a aplicação
Para exemplificar uma aplicação self-contained, primeiro temos que criar uma aplicação de exemplo. Ela poderia ser qualquer um dos tipos de aplicações suportados pelo .NET Core, mas para este artigo vou criar uma aplicação MVC:
dotnet new mvc -n App
Na aplicação criada é importante aplicar o restore:
dotnet restore
Compilar:
dotnet build
E executar para ver se está tudo certo:
dotnet run
Com a aplicação funcionando, podemos criar uma versão self-contained dela.
Criando uma aplicação self-contained
Para se definir que uma aplicação é self-contained é necessário fazer apenas uma pequena modificação nela. No arquivo .csproj, é necessário adicionar no elemento <PropertyGroup>
a plataforma alvo. Por exemplo:
<PropertyGroup>
<TargetFramework>netcoreapp1.1</TargetFramework>
<RuntimeIdentifiers>win10-x64</RuntimeIdentifiers>
</PropertyGroup>
Acima é definido que a plataforma alvo da aplicação é o ambiente Windows 10 de 64bits. Após isso, é necessário aplicar o restore na aplicação:
dotnet restore
E informar esta plataforma na hora da publicação dela:
dotnet publish -c release -r win10-x64
Com isso, será gerado um arquivo .exe:
Que ao ser executado, irá iniciar a aplicação:
Caso queria definir outros ambientes para a aplicação, eles podem ser informados à tag <RuntimeIdentifiers>
separados por ponto e vírgula:
<PropertyGroup>
<TargetFramework>netcoreapp1.1</TargetFramework>
<RuntimeIdentifiers>win10-x64;osx.10.12-x64;ubuntu.17.04-x64</RuntimeIdentifiers>
</PropertyGroup>
E depois de aplicar o restore:
dotnet restore
Basta informar para qual plataforma a aplicação deve ser gerada:
Mac OS X:
dotnet publish -c release -r osx.10.12-x64
Ubuntu:
dotnet publish -c release -r ubuntu.17.04-x644
Só é importante ficar atento se a plataforma alvo é suportada pelo .NET Core, caso contrário não vai funcionar.