Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
September 14, 2021 12:56 pm GMT

Scripts em C

Introduo

Scripts so uma ferramenta bem antiga nos ambientes de TI e ainda hoje so muito utilizados.

Sua natureza interpretada da eles um dinamismo que supera em muito as facilidades de qualquer linguagem compilada.

JavaScript, com Node Js, e Python so exemplos que demonstram que a utilizao de scripts no desenvolvimento de aplicaes ainda segue em alta e sua fora.

Estudando sobre Azure Functions me deparei com um arquivo a diferente extenso ".csx". Trata-se de um arquivo de scripts em linguagem C#, uma novidade para mim depois de vrios anos trabalhando com essa linguagem.

Compartilho aqui com vocs o que aprendi sobre essa ferramenta e minhas concluses.

Os scripts em C Sharp

Nos idos de 2011, Kirill Osenkov informou a comunidade .NET que a MS estava entregando o primeiro release preview do Roslyn Project. Nesse artigo, ele tambm informa que foi "introduzido o conceito de um arquivo de script C#" (OSENKOV, 2011). "A ideia principal por trs de escrever scripts em C# foi permitir que o cdigo fosse avaliado dinamicamente pelo _runtime." (WOJ, 2015).

Para escrever um script C# voc s precisa criar um arquivo com a extenso ".csx" em qualquer editor de textos. Depois de criar o arquivo voc vai precisar de um programa para interpret-lo. Hoje trs opes:

  • Mono/Roslyn CSI (que j vem instalado com o Visual Studio);
  • cs-scripts;
  • dotnet-scripts.

O cs-scripts e dotnet-scripts so multiplataforma, e dotnet-scripts tem a vantagem ser instalado com um dotnet tool e rodar usando o .NET 5.

No restante desse artigo vamos utilizar o dotnet-scripts para nossos exemplos. Para instal-lo digite o comando abaixo em seu console de preferncia:

dotnet tool install -g dotnet-script

Sintaxe

"Um script C# tem requisitos de sintaxe mais flexveis, ento a experincia geral pode ser sem cerimnias. Abaixo esto algumas coisas a serem lembradas:

  • o ponto de entrada para o seu script a primeira linha do seu arquivo (nenhum mtodo Main obrigatrio)
  • qualquer cdigo permitido a partir da primeira linha (nenhuma classe de nvel superior, Program, obrigatria)
  • funes globais so permitidas;
  • sem namespaces;
  • sem um arquivo de projeto ou soluo;
  • seu script pode ser totalmente autocontido;
  • instrues using e referncias so importados implicitamente pelo aplicativo hospedeiro (responsvel por executar o script)"(WOJ, 2015)

Eu acrescento essa lista o desenvolvimento de extenses, que foi algo que identifiquei nos meus testes.

Abaixo um exemplo de arquivo de script C# utilizado para inicializar o processo:

#load "Configs.csx"#load "src/Data/TodoListRepository.csx"#load "src/Services/TodoListService.csx"#load "src/Controller/TodoListController.csx"using Microsoft.Extensions.Configuration;await Run(Args.ToArray());async Task Run(string[] args){    using TodoListRepository repository = new(Configs.Configuration.GetConnectionString("db"));    TodoListService service = new(repository);    TodoListController controller = new(service);    await controller.ExecuteCommand(args);}

Como pode ser visto a sintaxe da linguagem a mesma j conhecida, s que sem a estrutura Program.Main. A forma de referenciar outros arquivos ".csx" utilizando a diretiva #load "<caminho do arquivo>".

Abaixo um exemplo de arquivo para leitura de configuraes, que faz referncia pacotes nuget:

#r "nuget: Microsoft.Extensions.Configuration, 5.0.0"#r "nuget: Microsoft.Extensions.Configuration.Binder, 5.0.0"#r "nuget: Microsoft.Extensions.Configuration.UserSecrets, 5.0.0"#r "nuget: Microsoft.Extensions.Configuration.EnvironmentVariables, 5.0.0"using Microsoft.Extensions.Configuration;public static class Configs{    private static IConfiguration _config;    public static IConfiguration Configuration     {        get         {            if (_config is null)                SetConfig();            return _config;        }    }    private static void SetConfig()    {        _config = new ConfigurationBuilder()                        .SetBasePath(Directory.GetCurrentDirectory())                        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)                        .AddUserSecrets("csx-script-app")                        .AddEnvironmentVariables()                        .Build();    }    public static T GetConfig<T>(string sectionName)    {        return Configuration.GetSection(sectionName).Get<T>();    }}

Referenciar um pacote bem simples utilizando #r "nuget: <nome do pacote>, <verso>".

Se for necessrio importar um assembly prprio utilize a direntiva #r "<caminho da dll>". Segue um exemplo:

#r: "./build/MeuAssembly.dll"

Desenvolvi um aplicativo Todo de exemplo e publiquei no meu GitHub onde possvel ver esses scripts em ao. Esse o link do projeto.

Debug

Se voc utiliza o Visual Studio Code como seu editor de texto/IDE debugar um script algo que seguir os padres que voc j esta acostumado. Basta configurar seu launch.json conforme abaixo, colocar o breakpoint e clicar em F5.

{  "version": "0.2.0",  "configurations": [    {      "name": ".NET Script Debug - Linux",      "type": "coreclr",      "request": "launch",      "program": "${env:HOME}/.dotnet/tools/dotnet-script",      "args": [        "${file}"      ],      "cwd": "${workspaceFolder}",      "stopAtEntry": false,    },    {      "name": ".NET Script Debug - Windows",      "type": "coreclr",      "request": "launch",      "program": "dotnet",      "args": [          "${env:USERPROFILE}/.dotnet/tools/.store/dotnet-script/1.2.1/dotnet-script/1.2.1/tools/net5.0/any/dotnet-script.dll",          "${file}"      ],      "cwd": "${workspaceRoot}",      "stopAtEntry": false    }  ]}

Compilao com um aplicativo e execuo no Linux.

Um ponto interessante que achei utilizando o dotnet-script no Windows foi a possibilidade de criar um aplicativo autocontido. Para fazer isso muito simples basta publicar o script como no exemplo abaixo:

dotnet script publish Main.csx

Um diretrio publish ser criado com um executvel. Como um aplicativo autocontido, basta copi-lo para qualquer computador e, mesmo sem o .NET instalado, execut-lo.

Em um ambiente Linux incluindo como primeira linha a diretiva #!/usr/bin/env dotnet-script possvel executar o script como qualquer outro, lembrando que preciso dar permisso de execuo no arquivo.

Concluso e aplicaes

Observando a tecnologia vemos que essa ferramenta bem madura e que vem se desenvolvendo junto com a plataforma e que ir continuar nesse caminho no futuro.

Hoje possvel escrever um programa console em C# de forma minimalista sem uma classe Program, um mtodo Main e com funes globais, algo que at pouco tempo atrs era impensvel. Com scripts C# voc consegue tudo isso e ainda a vantagem de desenvolver sem um ".csproj" e sem o tempo de compilao, apenas escrever o cdigo e j validar seu programa prontamente.

Testes de integrao que sero executados sob demanda; programas de carga que sero utilizados apenas uma vez; pequenos testes e estudos de algum pacote Nuget novo; Scripts de configurao de ambiente. Esses so apenas alguns exemplos de utilizao de scripts em C#.

No caso de scripts para configurao de ambiente ou inicializao de uma aplicativo, ainda existe a vantagem latente de seguir com a mesma linguagem que o projeto foi desenvolvido. Para a equipe isso uma vantagem, visto que preciso um esforo adicional para aprender e escrever o mesmo script com um bash script ou bat tradicional.

Em programas de carga existe ainda a vantagem de conseguir reaproveitar o cdigo e as regras de negcio do prprio projeto, sem duplicidades.

As aplicaes so muitas e certamente vale a pena incluir no "arsenal".

Referncias

BAHRAMINEZHAD, Ali. Hitchhikers Guide to the C# scripting. ITNEXT, 2019. Disponvel em: <https://itnext.io/hitchhikers-guide-to-the-c-scripting-13e45f753af9>. Acesso em: 11-09-2021

MICHAELIS, Mark. C# Scripting. Microsotf Docs, 2016. Disponvel em: <https://docs.microsoft.com/en-us/archive/msdn-magazine/2016/january/essential-net-csharp-scripting>. Acesso em: 11-09-2021

OSENKOV, Kirill. Introducing the Microsoft Roslyn CTP. Microsoft DevBlogs, 2011. Disponvel em <https://devblogs.microsoft.com/visualstudio/introducing-the-microsoft-roslyn-ctp/>. Acesso em: 12-09-2021

SALVADEO, Andr C B. Todo List em C# script (CSX). Github, 2021. Disponvel em <https://github.com/andrebarsotti/csx-script-sample>. Acesso em: 12-09-2021

VOGEL, Peter. Making Your Life Easier with C# Scripting. Visual Studio Magazine, 2021. Disponvel em: <https://visualstudiomagazine.com/articles/2021/06/14/csharp-scripting.aspx>. Acesso em: 11-09-2021

WOJ, Filip. Dotnet script. Github, 2021. Disponvel em <https://github.com/filipw/dotnet-script>. Acesso em: 11-09-2021

WOJ, Filip. Adding C# scripting to your development arsenal - Part 1. Microsoft Docs - Blog Archive - Canadian Developer Connection, 2015. Disponvel em <https://docs.microsoft.com/pt-br/archive/blogs/cdndevs/adding-c-scripting-to-your-development-arsenal-part-1>. Acesso em: 12-09-2021


Original Link: https://dev.to/andrebarsotti/scripts-em-c-10ff

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To