Setembro de 2017

Volume 32 - Número 9

.NET Core - Escrever aplicativos .NET como e onde quiser

Por Andrew Hall | Setembro de 2017

Espero que você já tenha ouvido que o Microsoft .NET não é mais apenas para Windows. O .NET Core traz a capacidade de escrever aplicativos executáveis em qualquer SO que você escolher (Windows, macOS ou Linux) usando a linguagem de sua preferência (C#, Visual Basic ou F#). Certamente, com a capacidade de escrever aplicativos direcionados para a plataforma de sua preferência, você espera obter as mesmas ferramentas para desenvolvedores que sempre foram a marca do .NET. A grande novidade é que nossas plataformas suportadas cresceram, assim como as ferramentas necessárias para criar aplicativos .NET incríveis. 

Neste artigo, mostraremos a você as ferramentas de desenvolvimento disponíveis com base em seu estilo de trabalho pessoal e SO. Começaremos com as ferramentas de linha de comando com o SDK que você pode emparelhar com qualquer editor (apesar de recomendarmos o Visual Studio Code). Em seguida, mostraremos os novos recursos incríveis do Visual Studio 2017 antes de apresentar a você o mais recente membro da família Visual Studio: o Visual Studio para Mac. Por fim, concluiremos mostrando como essas ferramentas permitem que você aproveite os contêineres de software e experimente seus aplicativos de forma simples na nuvem do Microsoft Azure.

Conceitos básicos

Usaremos o termo “.NET Core” em todo este artigo para manter a consistência, mas existem duas tecnologias importantes abrangidas por este nome: o .NET Core e o .NET Standard. O .NET Core é o suporte a Common Language Runtime entre plataformas que executa aplicativos. O .NET Standard é um conjunto imposto de compiladores de APIs usadas como destino para bibliotecas de classe, para que uma única biblioteca possa ser executada em qualquer Common Language Runtime que suporta o Standard. Por exemplo, o .NET Core 2.0, o .NET Framework 4.6.1 e o Mono 4.8 oferecem suporte às bibliotecas de classe .NET Standard 2.0 (e versões anteriores). Para entender melhor este conceito, consulte o artigo “Desmistificando o .NET Core e o .NET Standard” nesta edição.

Também é importante observar as linguagens suportadas pelo .NET Core e o .NET Standard 2.0. Em um nível alto, as duas tecnologias dão suporte a C#, Visual Basic e F# na versão 2.0. No entanto, nosso objetivo com esta versão do Visual Basic era habilitar as bibliotecas de classe do .NET Standard 2.0. Isto significa que o Visual Basic somente oferece modelos para bibliotecas de classe e aplicativos de console, enquanto o C# e o F# também incluem os modelos dos aplicativos ASP.NET Core 2.0.

Arquivo de projeto comum melhorado

Uma das primeiras coisas que você perceberá sobre trabalhar com os projetos .NET Core é que eles compartilham um formato de projeto altamente simplificado. Isto significa que um projeto criado com uma ferramenta (por exemplo, as ferramentas de linha de comando) funcionará em tudo o que for compatível com o .NET Core (como o Visual Studio ou o Visual Studio para Mac). Com nosso novo formato de arquivo de projeto, removemos a necessidade de GUIDs, e para arquivos explicitamente incluídos da listagem — o que reduz otimamente os conflitos de mesclagem ao confirmar atualizações no controle de versão. O seguinte código mostra todos os conteúdos do arquivo de projeto para um novo aplicativo de console C# do .NET Core:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>
</Project>

Além disso, o formato comum significa que os membros da mesma equipe podem trabalhar usando o dispositivo e a plataforma que preferirem. Se um membro da equipe quiser trabalhar no Mac, e outro no Windows, e um terceiro no Linux, todos eles podem contribuir para o mesmo projeto sem qualquer problema. Para saber mais sobre o formato de projeto atualizado, visite aka.ms/newprojectfile.

Ferramentas da linha de comando

A base de qualquer ferramenta de desenvolvedor é o Software Development Kit (SDK), e o .NET Core não é diferente. Uma das partes integrais do .NET Core SDK é a interface de linha de comando (CLI), que permite a você criar, compilar e executar aplicativos da linha de comando. Com o CLI, você pode usar seu editor preferido para criar aplicativos sem a necessidade de instalar ferramentas mais pesadas. Para começar, instale o .NET Core SDK gratuito (disponível no dot.net).

Depois de instalar o SDK, abra sei prompt de comando preferido e execute “dotnet --help” para ver uma lista de todos os comandos disponíveis para você. O comando dotnet é o driver do .NET CLI, no qual a gramática é “dotnet <verb> [parameters]”. Por exemplo, para ver todos os modelos de tipo de projeto disponíveis para criar, digite “dotnet new”.  Para criar um novo projeto, forneça o nome curto como o parâmetro da “nova” ação. Por exemplo, “dotnet new razor” criará um aplicativo Web em C# do ASP.NET Core com as novas páginas Razor do .NET Core 2.0 (para saber mais sobre este novo recurso excelente, consulte aka.ms/razorpages). Para executar o aplicativo, digite “dotnet run” para compilar e iniciar o aplicativo. Abrir um navegador na URL indicada na cadeia de caracteres de saída (por exemplo, http://localhost:5000) permite que você interaja com o aplicativo que você está compilando.  A partir deste ponto, o desenvolvimento é uma simples questão de escolher seu editor preferido para compilar e executar o aplicativo.

Teste de unidade

Assim que você tiver um aplicativo, você desejará adicionar suporte ao teste de unidade relativamente cedo no ciclo de vida dele. O teste de unidade trabalha com seus IDEs como esperado, mas você também pode compilar e executar testes de unidade diretamente a partir do .NET CLI. 

Você pode ter percebido que o “dotnet new” oferece dois tipos de projeto de teste de unidade diferentes: xunit e mstest. Para começar, crie um projeto de teste de unidade com sua estrutura de teste de unidade preferida, por exemplo “dotnet new xunit”, e depois em seu tipo de pasta de projeto de teste “dotnet add reference <path to project to test>” para que a CLI adicione a referência ao arquivo de projeto para você. Quando você tem um projeto de teste de unidade, execute seus projetos de teste a partir da CLI usando o comando “dotnet test”. Independentemente do tipo de projeto que você escolher, os projetos xunit e mstest são suportados pelo Visual Studio e o Visual Studio para Mac, assim como a CLI.

Visual Studio Code

Apesar de você ter a liberdade de usar qualquer editor que quiser, achamos que o Visual Studio Code oferece a melhor experiência para usuários que desejam obter uma experiência de edição leve em combinação com a CLI do .NET Core.  O Visual Studio Code é nosso editor de plataforma cruzada leve com controle de código-fonte e suporte de depuração integrado. Usando a CLI do .NET com o Visual Studio Code, você pode compilar aplicativos do .NET em qualquer aplicação escolhida. Para começar, você precisará instalar o .NET Core SDK como discutido anteriormente. Quando ele estiver em seu computador, instale o Visual Studio Code do code.visualstudio.com e, em seguida, a extensão C# da Microsoft — C# para Visual Studio Code (distribuído por OmniSharp) — selecionando a guia de extensão do lado esquerdo do Visual Studio Code. (Se estiver usando F#, você também desejará instalar a extensão Ionide-fsharp. Observe que a extensão C# é necessária para dar suporte a depurações e compilações do .NET Core). Agora você está pronto para desenvolver projetos do .NET Core usando o Visual Studio Code. 

A extensão C# permite que o código do Visual Studio chame a CLI em seu nome para compilar e executar aplicativos de depuração. Depois de ter criado seu projeto, abra o Visual Studio Code e no menu Arquivo, selecione Abrir pasta. Você verá um prompt ao abrir um arquivo C# file (.cs) — uma barra de sugestão na parte superior do editor propondo gerar os ativos necessários para a compilação e a depuração, como mostrado na Figura 1. Selecione Sim e dois arquivos serão gerados, tasks.json, que permite compilar no Visual Studio Code, e launch.json, que permite depurar. Agora você está pronto para editar, compilar e depurar diretamente no Visual Studio Code.

Visual Studio Code propondo a criação dos arquivos necessários para compilar e depurar

Figura 1 Visual Studio Code propondo a criação dos arquivos necessários para compilar e depurar

Visual Studio

O Visual Studio continua a dar suporte a uma experiência de categoria mundial para o desenvolvedor, e o suporte à ferramenta .NET Core não fica para trás. O suporte ao .NET Core 2.0 foi introduzido no Visual Studio 2017 (versão 15.3). Para começar a escrever um aplicativo .NET Core 2.0 no Visual Studio, você precisa baixar e instalar o SDK do .NET Core 2.0. Assim que ele estiver em seu computador, reinicie o Visual Studio e você verá o .NET Core 2.0 como um destino para novos projetos.

Nosso objetivo é tornar o Visual Studio 2017 a experiência de desenvolvimento mais produtiva que já oferecemos. Para abordar alguns destaques, adicionamos melhorias à navegação de código, um número significativo de novos comando de refatoração/correção rápida, imposição de estilo de código e Live Unit Testing.

Navegação e refatoração Sabemos que enquanto você trabalha em seu código é importante ter um suporte excelente para navegar por sua base de código. As melhorias mais populares para navegação de código no Visual Studio 2017 são:

  • Ir Para Implementação (Ctrl+F12): Navega de qualquer tipo de base ou membro para suas várias implementações.
  • Ir para Todos (Ctrl+T ou Ctrl+,): Navega diretamente para qualquer arquivo/tipo/membro/declaração de símbolo. Você pode usar os ícones que aparecem na parte superior do recurso para filtrar sua lista de resultados ou usar a sintaxe de consulta (por exemplo, “a termo de pesquisa” para arquivos, “t termo de pesquisa” para tipos e assim por diante).
  • Localizar Todas as Referências (Shift+F12): Agora, com a colorização de sintaxe, os resultados de Localizar Todas as Referências pode ser agrupado de forma personalizada por uma combinação de projeto, definição e caminho. Você também pode “bloquear” resultados para que possa continuar a encontrar outras referências sem perder os resultados originais.
  • Guias de recuo: As linhas verticais cinzas e pontilhadas servem como marcos no código para fornecer contexto dentro de seu quadro de visão. Você pode reconhecê-las no famoso Productivity Power Tools.

Além disso, não é suficiente conseguir simplesmente navegar pelo seu código base; sabemos que ao encontrar pontos para alterar ou limpar em seu código, você precisa de ferramentas que ajudam na refatoração. Para ajudar com isso, adicionamos suporte para mover um tipo a um arquivo com o mesmo nome, sincronizando um arquivo e um nome de tipo, adicionando uma verificação de valor nulo para um parâmetro, adicionando um parâmetro, adicionando um caso de alternância/seleção ausente, tornando um método síncrono, convertendo um método para uma propriedade (e vice-versa), e resolvendo um conflito de mesclagem — só para citar alguns. 

Estilo de código No Visual Studio 2017, você pode configurar e impor as convenções de codificação da equipe para gerar consistência em todo o seu repositório com o EditorConfig. O EditorConfig é um formato de arquivo aberto e trabalhamos com a comunidade dele para dar suporte ao estilo de código do .NET dentro deste formato. As equipes podem configurar as preferências de convenção e escolher como elas são impostas dentro do editor (como sugestões, avisos ou erros). As regras a serem aplicadas a qualquer arquivo estão no diretório que contém o arquivo do EditorConfig. Se você tiver convenções diferentes para diferentes projetos, você pode definir as regras de cada projeto em diferentes arquivos do EditorConfig contanto que os projetos estejam em diretórios separados. Pois, no fim das contas, o EditorConfig é apenas um arquivo de texto, por isso é fácil verificá-lo no controle do código-fonte e tê-lo ativo e transitando pelo seu código-fonte. Para saber mais sobre o suporte ao EditorConfig no Visual Studio, consulte aka.ms/editorconfig.

Live Unit Testing Quando tiver um projeto de teste MSTest ou xUnit ou NUnit, você pode habilitar o Live Unit Testing (LUT) em seus projetos do .NET Core. LUT é um novo recurso introduzido no Visual Studio 2017 Enterprise Edition. Ao habilitar o LUT, você obtém cobertura de teste de unidade e feedback de aprovação e reprovação no editor de código enquanto digita, como mostrado na Figura 2. Isso significa que você não precisa mais sair do editor para executar testes de unidade para verificar alterações de código. Assim que você digita, você verá feedback instantâneo no editor mostrando os resultados de todos os testes que são impactados pela alteração de código.

Live Unit Testing executado em um projeto do .NET Core

Figura 2 Live Unit Testing executado em um projeto do .NET Core

As equipes são aficionadas por qualidade e os usuários que adoram desenvolvimento orientado por testes (TDD) também vão gostar desta novidade. Para ligar o LUT, navegue até a entrada Test na barra de menus no Visual Studio e selecione Live Unit Testing | Start.

Visual Studio para Mac

O Visual Studio for Mac é o mais novo membro da família Visual Studio para desenvolvedores que querem uma experiência de IDE no macOS. O Visual Studio para Mac evoluiu do Xamarin Studio, que traz suporte para projetos em C# e F#. Para começar, primeiro instale o SDK do .NET Core 2.0 (disponível para download no dot.net), escolha Criar projeto, em seguida, selecione a entrada do aplicativo na categoria do .NET Core para escolher o modelo de projeto desejado. 

Você encontrará um ambiente de desenvolvimento integrado com todos os recursos necessários para desenvolver aplicativos do .NET Core em seu Mac, como mostrado na Figura 3. Estamos trabalhando duro para trazer uma experiência consistente entre o Visual Studio e o Visual Studio para Mac. Neste ponto, você tem a maioria dos recursos com os quais passou a contar no Visual Studio, incluindo o IntelliSense, navegação de código, refatoração, teste de unidade e integração de controle do código-fonte. Para o desenvolvimento da Web, trouxemos os editores de HTML, CSS e JSON do Visual Studio para o Visual Studio para Mac. Você perceberá que os arquivos Razor (.cshtml) e JavaScript/TypeScript não contam com suporte no momento, mas estamos trabalhando para oferecer este suporte no Visual Studio para Mac em uma próxima atualização.

Visual Studio para Mac

Figura 3 Visual Studio para Mac

Ferramentas pensadas para a tecnologia de nuvem moderna

Com a evolução do mundo da tecnologia, uma coisa é clara — cada vez mais aplicativos serão concebidos para serem executados na nuvem desde o início. Isto significa que suas ferramentas precisam habilitar os padrões e práticas de design tendo em mente a tecnologia de nuvem moderna, assim como permitir que você mude rapidamente de um aplicativo de seu computador de desenvolvimento local para a nuvem.  Com este objetivo em mente, tanto o Visual Studio quanto o Visual Studio para Mac têm suporte integrado para publicação diretamente no Microsoft Azure e para aplicativos de empacotamento como o contêineres Docker.

Publicar diretamente no Azure Quando você estiver pronto para migrar um aplicativo para ser executado na nuvem, provavelmente desejará começar a experimentá-lo na nuvem com o mínimo de esforço possível. Tanto o Visual Studio quanto o Visual Studio para Mac permite que você publique um aplicativo diretamente de seu computador no Serviço de Aplicativo do Azure. O Serviço de Aplicativo é um ambiente de nuvem totalmente gerenciado que permite executar seu aplicativo sem a necessidade de se preocupar com configurações complexas ou gerenciamento de infraestruturas.

Publicar seu aplicativo a partir de seu computador local no Serviço de Aplicativo do Azure do Visual Studio ou do Visual Studio para Mac é tão simples quanto clicar com o botão direito no projeto e selecionar Publicar. Você será solicitado a inserir algumas informações, como a URL única de seu aplicativo, e você poderá escolher um Plano de Serviço de Aplicativo existente (quantos recursos você quer reservar para a coleção de aplicativos de membros) ou criar um novo se ainda não tiver um. Após inserir as informações, seu aplicativo estará em execução na nuvem em questão de minutos. 

Ferramentas de desenvolvimento de contêiner Uma das coisas que está se tornando clara sobre o desenvolvimento de nuvem moderno é que os contêineres vão revolucionar a maneira como as pessoas arquitetam e criam software. Os contêineres permitem que você empacote seu aplicativo e todas as suas dependências, incluindo uma cópia do tempo de execução, em uma única unidade, garantindo que as alterações no servidor subjacente nunca interrompam seu aplicativo. Isto habilita um padrão de arquitetura de microsseviço, no qual você implanta cada uma das unidades de lógica dentro de seu aplicativo como um contêiner separado, com um protocolo definido para comunicar entre eles. Isto permite que você dimensione partes do aplicativo com maior demanda conforme necessário, sem precisar pagar o custo de dimensionar todo o aplicativo. Desta forma, as correções afetam apenas o contêiner que está sendo atualizado em vez de todo o aplicativo.

Com isso em mente, um de nossos objetivos com o .NET Core é torná-lo o tempo de execução principal para a criação de microsserviços em contêineres. O Visual Studio, Visual Studio para Mac e Visual Studio Code têm suporte para aplicativos de compilação como os contêineres do Docker. (Observe que no momento em que este artigo foi escrito, a ferramenta Docker de suporte ao Visual Studio para Mac requer a extensão do Docker Tools e a Microsoft oferece uma extensão do Docker para Visual Studio Code para oferecer suporte à criação de contêineres do Docker.)

Para compilar um contêiner do Docker, você precisa de ferramentas do Docker para o seu SO instalado (saiba mais e baixe-o no site docker.com). Quando tiver os requisitos instalados, tudo o que você precisa fazer no Visual Studio ou no Visual Studio para Mac é clicar com o botão direito no projeto, escolher Add e selecionar Docker Support. Isso adicionará um projeto docker-compose à sua solução e um arquivo Docker ao projeto. Esses ativos permitem que seu projeto seja compilado no contêiner do Docker. Ao executar o aplicativo no ambiente de desenvolvimento integrado, você estará executando e depurando seu aplicativo dentro de um contêiner em vez de fazê-lo diretamente no computador host. A ótima notícia é que a publicação na experiência do Serviço de Aplicativo do Azure suporta, conforme discutimos anteriormente, publicações de contêineres do Docker para Linux.

Conclusão

Se você ainda não experimentou compilar um aplicativo do .NET Core, agora é o melhor momento. O .NET Core e o .NET Standard 2.0 (como abordado no artigo “Desmistificando o .NET Core e o .NET Standard”) torna a criação de um aplicativo .NET fácil com qualquer ferramenta, SO, linguagem ou estilo de trabalho que você escolher. 

Esperamos que você encontre esta apresentação das ferramentas disponíveis do .NET Core úteis. Você pode continuar acompanhando o progresso de nossa equipe e os próximos aprimoramentos no nosso blog em aka.ms/diagnosticsblog. Experimente as ferramentas que discutimos e mande-nos opiniões sobre o que podemos fazer para melhorar sua experiência com a criação de aplicativos do .NET Core. Você pode deixar comentários e perguntas sobre nossas publicações no blog ou nos enviar suas opiniões diretamente pelo Visual Studio e Visual Studio para Mac usando os recursos Relatar um problema e Dar uma sugestão compilados nos ambientes de desenvolvimento integrado.


Andrew Hall  é o gerente principal de programação das linguagens e ferramentas .NET no Visual Studio. Depois de se formar na universidade, ele criou aplicativos de negócios antes de voltar a estudar para conquistar seu mestrado em ciência da computação. Depois de concluir seu mestrado, ele se juntou à equipe de diagnóstico do Visual Studio, na qual ele trabalhou nas ferramentas de depuração, criação de perfil e análise de código. Depois, ele mudou para a equipe de linguagens e ferramentas .NET, na qual ele trabalha nas ferramentas de linguagem e suporte do .NET, incluindo ASP.NET, Web e Azure App Service. Você pode seguir Hall no Twitter: @AndrewBrianHall.

Joe Morris é gerente de programação de ferramentas do .NET Core e do Live Unit Testing no Visual Studio. Ele possui mestrado em Ciência da Computação, e iniciou sua carreira como consultor de desenvolvimento de aplicativos em empresas nos Estados Unidos nos anos 90. Ele entrou na Microsoft em 1997 com os Serviços de consultoria Microsoft, em Iowa, e depois se mudou para Redmond. Nos últimos dois anos, ele tem focado seu trabalho na análise de código estático e em ferramentas de produtividade de desenvolvimento. Você pode seguir Morris no Twitter: @_jomorris.

Agradecemos aos seguintes especialistas técnicos da Microsoft pela revisão deste artigo: Dustin Campbell, Phillip Carter, Livar Cunha, Mikayla Hutchinson, Mads Kristensen, Jordan Matthiesen e Kasey Uhlenhuth

 


Discuta esse artigo no fórum do MSDN Magazine