Skip to content
chaveprimaria edited this page Apr 3, 2024 · 7 revisions

Welcome to the loja-do-valdir wiki!

O que é uma CLI?

A CLI (Interface de Linha de Comando | Command Line Interface), é uma ferramenta central desenvolvida para ser utilizada no terminal ou prompt de comando de sistemas operacionais, sendo compatível com Windows, Linux e MacOS.

image

Para que serve?

Faz parte do ambiente de desenvolvimento .NET e oferece uma interface versátil para executar uma variedade de tarefas, tais como:

  • Compilação: transforma código-fonte em um executável (arquivo que contém um programa pronto para ser executado/rodado) ou biblioteca que pode ser executada em um ambiente .NET;
  • Execução: roda aplicativos e testes diretamente no terminal;
  • Depuração: identifica e corrige problemas no código;
  • Gerenciamento de pacotes: instala, atualiza e remove pacotes NuGet (gerenciador de pacotes), que são bibliotecas de código reutilizáveis;
  • Publicação: prepara e implanta aplicativos para distribuição;
  • Geração de Código: cria novos projetos e arquivos de código-fonte;
  • Testes: executa testes automatizados para verificar a qualidade do código;
  • Gerenciamento de Versão: trabalha com diferentes versões do .NET SDK (conjunto de ferramentas) e runtimes (ambiente de execução).

Em resumo, é uma ferramente essencial para simplificar e automatizar o processo de desenvolvimento de software na plataforma .NET, oferecendo uma maneira eficiente de gerenciar e executar tarefas comuns através da linha de comando.

Como é utilizada e casos de uso

Como mencionado anteriormente, a CLI é utilizada principalmente por desenvolvedores afim de realizar tarefas relacionadas a construção de apps e bibliotecas. Isso inclui:

  • Criação de Projetos: seja para aplicativos, bibliotecas de classe ou projetos de testes, a CLI simplifica o processo com comandos simples, permitindo até mesmo especificar o projeto desejado, a linguagem (C#, F#,etc), o nome e outros parâmetros relevantes;
  • Compilação e Execução: útil para testar o código durante o processo de desenvolvimento ou executar scripts automatizados;
  • Gerenciamento de Pacotes: o NuGet, integrado à CLI do .NET, facilita o gerenciamento de pacotes em projetos. Desenvolvedores podem instalar, atualizar e remover pacotes diretamente do terminal;
  • Testes Automatizados: a CLI descomplexifica a execução de testes automatizados usando frameworks como xUnit, NUnit ou MSTest, autorizando a execução de testes unitários, de integração ou aceitação pela linha de comando;
  • Publicação de Aplicativos: após concluir o desenvolvimento, os devs podem utilizar a CLI para publicar o app, preparando-o para implantação em produção, incluindo compilação, empacotamento de recursos e criação de artefatos de distribuição;
  • Implantação de Ambientes em Produção: por fim, a CLI pode ser usada também para implantar aplicativos em ambientes de produção, seja em servidores locais, na nuvem ou em contêineres, automatizando o processo de implantação ou ferramentas de integração/entrega contínua (CI/CD — Integração Contínua - Continuous Integration | Entrega Contínua/Implantação Contínua - Continuous Delivery/Continuous Deployment).

Comandos e seus argumentos

A CLI do .NET segue uma abordagem modular e hierárquica — padrão —, onde comandos principais são usados para realizar tarefas de alto nível, e esses comandos podem ser seguidos por subcomandos e argumentos para executar tarefas mais específicas. Nesta seção, está listada os comandos mais comuns e utilizados, além de seus argumentos correspondentes.

dotnet new

É utilizado como ponto inicial, sendo assim, criando novos projetos e arquivos de código-fonte.

dotnet new <TEMPLATE> [-n <NAME>] [-o <OUTPUT>] [--force]

  • Neste primeiro exemplo de estrutura, no lugar do template pode-se substituir por um modelo como console, classlib, wpf ou qualquer outro argumento que desejar criar;
  • -n argumento para nomear o arquivo;
  • -o nomeia diretório/pasta;
  • force é opcional, sendo utilizado em casos que se necessite que "force" o computador a executar a tarefa, mesmo que haja um impedimento prévio.

ou

dotnet new <TEMPLATE> [-o <OUTPUT> ] [--force]

  • Seguindo a lógica do primeiro exemplo, a única diferença se faz presente dentro do caso de não especificar o nome do projeto, logo, o arquivo assumirá o nome do diretório criado.

exemplos

COMANDO SUBCOMANDO EXECUÇÃO
dotnet new console Cria aplicação console C#.
dotnet new mvc -au None Cria projeto MVC no diretório atual sem autenticação.
dotnet new --install Instala novos templates.
dotnet new --help Lista templates personalizados disponíveis.

obs: a partir do sdk do .net 7, a sintaxe do dotnet new foi alterada. Para cada subcomando — operações especificas que podem ser realizadas dentro do contexto do comando principal, neste caso o dotnet new — utilize a opção -h ou --help: dotnet new --help, assim listando todas as opções com suporte para o subcomando.

antes do SDK .NET 6.0.100 a partir do SDK .NET 6.0.100
dotnet new spa --list dotnet new list
dotnet new --search dotnet new search
dotnet new --install dotnet new install
dotnet new --uninstall dotnet new uninstall
dotnet new --update-apply dotnet new update
dotnet new --update-check dotnet new update --check-only

dotnet restore

Um projeto do .NET normalmente faz referências a bibliotecas externas em pacotes NuGet que fornecem funcionalidade adicional. Essas dependências externas são referenciadas no arquivo de projeto .csproj ou .vbproj.

dotnet restore <ARGUMENTO> <ARQUIVO/PASTA>

  • O comando segue a estrutura básica de um comando CLI, onde se tem o nome do comando seguido de quaisquer argumentos e opcionalmente o arquivo ou pasta alvo;
  • Ao executar o comando, a interface utiliza o NuGet procura e se necessário, baixa as dependências no arquivo de projeto, garantindo que todas as bibliotecas necessárias estejam disponíveis localmente para compilação e execução do projeto. Ele também garante que sejam compatíveis entre si e que não haja conflitos entre elas.

exemplos

COMANDO SUBCOMANDO EXECUÇÃO
dotnet restore [<ROOT>] Especifica o diretório raiz a partir do qual as dependências devem ser restauradas. Por padrão, o diretório atual é usado como raiz.
dotnet restore --configfile Especifica um arquivo de configuração do NuGet para ser usado durante a restauração, o que pode ser útil para configurar repositórios de pacotes personalizados ou autenticação.
dotnet restore --disable-build-servers Desabilita a utilização de servidores de compilação remotos durante a restauração.
dotnet restore --disable-parallel Desabilita a restauração paralela de pacotes.
dotnet restore -f ou --force Força a restauração de dependências, mesmo que elas já estejam presentes localmente ou sejam consideradas desnecessárias. Pode vir a ser útil em casos onde queira garantir que todas as dependências sejam/foram atualizadas.
dotnet restore -force-evaluate Força a reavaliação dos arquivos de projeto durante a restauração.
dotnet restore --ignore-failed-sources Ignora fontes de pacotes que falharam ao tentar serem restauradas.
dotnet restore --interactive Permite a interação do usuário durante a restauração, se necessário.
dotnet restore --lock-file-path <LOCK_FILE_PATH> Especifica o caminho para o arquivo de bloqueio a ser usado durante a restauração.
dotnet restore --locked-mode Habilita o modo de bloqueio, onde as versões dos pacotes são fixadas no arquivo de bloqueio.
dotnet restore --no-cache Desabilita o uso do cache de pacotes durante a restauração, forçando o NuGet a baixar todas as dependências novamente. Isso pode ser útil se estiver enfrentando problemas relacionados ao cache ou se quiser garantir que esteja obtendo as versões mais recentes dos pacotes.
dotnet restore --no-dependencies Restaura apenas o projeto especificado, ignorando suas dependências.
dotnet restore --packages <PACKAGES_DIRECTORY> Especifica o diretório onde os pacotes restaurados serão armazenados.
dotnet restore -s ou --source especifica os locais onde o NuGet deve procurar por pacotes. Este argumento pode ser usado para adicionar os repositórios NuGet adicionais para pesquisa de pacotes.
dotnet restore --use-lock-file Usa um arquivo de bloqueio existente durante a restauração.
dotnet restore -v ou --verbosity Especifica o nível de verbosidade da saída durante a restauração.

dotnet build

O comando dotnet build compila o projeto e suas dependências em um conjunto de binários, estes que incluem o código do projeto em arquivos de Linguagem Intermediária (IL - Intermediate Language) com extensão .dill. Dependendo do tipo de projeto e das configurações, outros arquivos podem ser gerados:

  1. Um executável, caso o projeto seja um app executável direcionado ao .NET Core 3.0 ou posterior;
  2. Arquivos de símbolos .pdb (Program Database) para depuração;
  3. Um arquivo .deps.json ou .runtimeconfig.json especificando o tempo de execução compartilhado e sua versão em um aplicativo;
  4. Outras bibliotecas das quais o projeto depender, por meio de referências de projeto ou do NuGet.

Para projetos executáveis direcionados a versões anteriores ao .NET Core 3.0, as dependências de biblioteca do NuGet normalmente não são copiadas para a pasta de saída. Elas são resolvidas da pasta de pacotes globais do NuGet em tempo de execução. Nesse caso, o produto de dotnet build não está pronto para ser transferido para outro computador para execução. Para criar uma versão do aplicativo que possa ser implantada, você precisa publicá-lo (por exemplo, com o comando dotnet publish).

Já para projetos executáveis direcionados ao .NET Core 3.0 e posteriores, as dependências da biblioteca são copiadas para a pasta de saída. Isso significa que, se não houver nenhuma outra lógica específica de publicação (como projetos Web), a saída de compilação será implantável, ou seja, prontos para serem distribuídos e executados em um ambiente de produção, sem necessidade de etapas adicionais de configuração ou preparação.

dotnet build <ARGUMENTO>

  • --configuration especifica a configuração de compilação a ser utilizada, como "Debug" ou "Release".
  • --framework Especifica o framework de destino para o qual o projeto deve ser compilado.
  • --output Especifica o diretório de saída para os arquivos compilados.
  • --no-incremental Desativa a compilação incremental, forçando uma recompilação completa do projeto.
  • --no-dependencies Compila apenas o projeto especificado, ignorando suas dependências.
  • --verbosity Especifica o nível de detalhamento da saída durante a compilação.
Clone this wiki locally