Apresentei no post anterior minhas aventuras com o porte do .NET nanoFramework para Linux e NuttX. Nesse artigo irei documentar como você pode executar aplicações .NET nanoFramework usando esse porte.
Você pode usar qualquer solução criada pela extensão do .NET nanoFramework para Visual Studio. Infelizmente, não há ainda um template para o dotnet
CLI (para ficar independente do VS 2019 por exemplo). Para esse caso, eu criei um exemplo que você pode clonar o repositório.
⚠️ Para os passos a seguir iremos usar comandos que fazem parte do Mono. Tenha certeza de ter instalado o pacote mais recentemono-complete
em sua distro Linux.
Siga os passos com um terminal aberto:
1- Clone o repositório dos exemplos:
git clone https://github.com/dotnuttx/nanoFrameworkPOSIX-samples.git
2- Entre na pasta CSharpHelloWorld
:
cd nanoFrameworkPOSIX-samples/CSharpHelloWorld
Para esse exemplo vamos compilar o seguinte Program.cs
:
using System.Diagnostics;
using System.Threading;
using nanoFramework.Runtime.Native;
namespace CSharpHelloWorld
{
public class Program
{
public static void Main()
{
Debug.WriteLine($"Hello from nanoFramework on {SystemInfo.OEMString}!");
Thread.Sleep(Timeout.Infinite);
}
}
}
3- Faça download dos pacotes NuGet listados no packages.config
, execute:
nuget restore
⚠️ A versãov2.6.4.6
do interpretador para Linux precisa exatamente da versão1.10.5-preview.18
do pacotenanoFramework.CoreLibrary
4- Compile a solução, execute:
msbuild
Após a build você deverá ter os seguintes arquivos com extensão .pe
na pasta bin/Debug/
do projeto:
ls -l bin/Debug/*.pe
-rw-r--r-- 1 castello castello 456 Jun 22 17:17 bin/Debug/CSharpHelloWorld.pe
-rwxr--r-- 1 castello castello 31668 Jun 19 07:25 bin/Debug/mscorlib.pe
-rwxr--r-- 1 castello castello 1496 Jun 19 07:46 bin/Debug/nanoFramework.Runtime.Native.pe
Esses são os Portable executables
/assemblies
que o interpretador do .NET nanoFramework sabe ler e executar. Se você tem eles listados na pasta bin/Debug/
, parabéns 🎉 você compilou a aplicação com sucesso.
Você pode baixar binários pré-compilados do interpretador para Linux aqui: https://github.com/dotnuttx/nf-Community-Targets/releases
Para Linux arquitetura x86-64
temos dois sabores do binário:
⚠️ A versão.debug
do binário é compilada com os debug symbols e com algunstrace by print
habilitados. Ela será útil se você estiver trabalhando no desenvolvimento do interpretador.
Para instalar baixe o binário, adicione permissões de execução e mova para /usr/bin/
:
wget https://github.com/dotnuttx/nf-Community-Targets/releases/download/v2.6.4.6/dotnet-nf.x86-64-Linux.2646
chmod +x dotnet-nf.x86-64-Linux.2646
sudo mv dotnet-nf.x86-64-Linux.2646 /usr/bin/dotnet-nf
Agora podemos enfim usar o runtime, para rodar nossa aplicação compilada nos primeiros passos. O binário recebe como argumento o caminho de uma pasta aonde irá carregar todos os arquivos .pe
listados. Vá para a pasta CSharpHelloWorld/
do repositório do exemplo e execute:
dotnet-nf bin/Debug/
Se você tiver algo parecido com o seguinte output:
⚠️ A propriedadeSystemInfo.OEMString
em plataformas POSIX irá apresentar as mesmas informações do comandouname -a
, provavelmente esse trecho estará diferente no seu Linux.
Parabéns 🎉! Você executou sua primeira aplicação .NET nanoFramework no Linux.
Ter o nanoFramework rodando em Linux é uma opção bacana para quem quer estudar o internals do nanoCLR
fazer testes e debug usando o sistema do pinguim 🐧.
⚠️ Lembrando que isso é algo que estou trabalhando nos finais de semana e durante meu tempo livre. É algoEXTREMAMENTE EXPERIMENTAL
e não estou sendo financiado por nenhum grupo ou instituição para tal.
Gostou da possibilidade? Se isso for de alguma forma útil, ou fizer sentido para você, deixe me saber. Me mande um alô no Twitter @math_castello ou no Linkedin 👍