Solutions e Projetos I - Projetos¶
Projects¶
Embora o Visual Studio suporte modelos alternativos de organização de código (diretórios no sistema de arquivos) ou suporte de websites hospedados no IIS, o principal modelo de organização de código é feito através de Solutions e Projects.
Algumas notas importantes sobre projetos:
- Projetos são os módulos organizadores de código fonte, não apenas no Visual Studio, mas para o .net como um todo.
- São estruturados na forma de templates e com dependências pré-configuradas.
- Via de regra, cada projeto produz uma biblioteca (.dll) ou um aplicativo executável (.exe).
Algumas das categorias de projetos mais importantes são
- Aplicações Asp.net: WebApi, Razor MVC
- Bibliotecas: Class library, Windows Forms Libs
- Execução de Testes: xUnit Test Project, MSTest
A explicação sobre as finalidades e maneiras de compor cada um desses tipos de projetos varia segundo o desenvolvimento a ser realizado e é possível achar muitas e boas fontes de informação sobre cada um destes tipos. Uma explicação introdutória das seções, configuração e funcionamento de projetos podem ser encontradas no artigo de referência Introduction to projects and solutions ⧉.
A estrutura típica de um projeto é exibida na imagem abaixo
As seções mais importantes apresentadas na figura acima são as seguintes:
Project SDK¶
Está relacionado a cada stack de distribuição do .net, conforme explicado em . Um mesmo stack pode servir para diferentes tipos de projetos, conforme exibido na imagem abaixo.
Target Framework¶
O target framework se refere à qual versão dotnet este projeto será compilado e executado. Para o .net vale a retrocompatibilidade, ou seja, sdk e runtimes mais novos conseguem compilar e executar aplicações com targetFramework mais antigos. Entretanto, assim como em outras plataformas, versões muito antigas não são mais suportadas. No caso do .net, não é possível compilar aplicações nas versões ".net core 1.0", ".net core 2.0", ".net core 3.0". Aplicações nestas versões devem ser migradas manualmente para target mais elevados. Mais informações podem ser lidas aqui ⧉.
Dependências de pacotes nuget¶
Componentes nuget são parte essencial do desenvolvimento de aplicações. São compostos de um manifesto (.nupkg), componentes binários e arquivos de recursos. O nuget é o utilitário oficial que administra a gestão dos pacotes na plataforma .net.
A inclusão de componentes nuget em um projeto é bastante simples e se resume ao nome de registro do pacote e a versão desejada. Essa operação pode ser feita diretamente no arquivo do projeto, conforme se pode ver na imagem acima. Uma vez incluída a referência ao pacote e gravado o arquivo, a IDE se encarrega de buscar e disponibilizar o componente para utilização de projeto.
Modificações de referências nuget no arquivo .csproj
Sugere-se cautela ao fazer essa modificação diretamente no arquivo de projeto, uma vez que erros no nome, no fechamento das tags de marcação ou declaração de uma versão inexistente ou inválida pode inviabilizar o projeto.
O mecanismo preferencial do Visual Studio para gestão de pacotes nuget é através de ambiente gráfico que permite busca, seleção, instalação, desinstalação e atualização de pacotes nuget. Entretanto, estas operações podem ser realizadas diretamente no arquivo de projeto.
A inclusão e modificação de dependências de pacotes nuget pode ser feita editando diretamente o arquivo de projetos. A dependência é simples Projetos oferecem uma maneira bastante simples de referenciar pacotes dependências de [pacotes nuget] são referenciados diretamente a partir de
Dependências de outros projetos¶
A modularização de um aplicativo em projetos permite o agrupamento do código fonte, documentos, configurações e recursos em blocos correlacionados, facilitando a manutenção do código em geral. A estrutura de modularização é diretamente suportada pelo compilador e tem suporte bastante maduro na plataforma .net. A inclusão de referências a outros projetos cria uma vínculo de compilação, fazendo com que os projetos referidos sejam compilados antes do projeto que os referencia. Dependências entre projetos podem ser declaradas apenas indicando a localização do respectivo arquivo .csproj. e pode ser feita diretamente no arquivo csproj, mas da mesma forma que os pacotes nuget, sugere-se a utilização de assistentes de inclusão de referência oferecidos pelo Visual Studio.
Modificações diretas no arquivo .csproj
O visual studio permite a edição direta de um arquivo .csproj sem maiores dificuldades. É um recurso valioso porque permite a modificação rápida de configurações e dependências de bibliotecas e outros projetos. Recomenda-se entretanto que as modificações feitas dessa maneira preferencialmente exploratórias ou de estudo. Modificações indevidas podem acarretar inutilização do projeto e de suas dependências.
As opções e comandos de um projeto podem ser acessadas diretamente a partir do Solution Explorer, de maneira similar ao que acontece em Solutions.
A partir da janela do Solution Explorer, é possível a inclusão de novos projetos em uma solution, bem como um conjunto extenso de comandos. Alguns dos comandos de utilização mais frequente estão destacados na ilustração e nos tópicos abaixo:
Manage Nuget Packages...¶
Pode ser acionado tanto a partir de um projeto ou a partir da solução. Quando acionado a partir do arquivo de solução (.sln), as ações do gerenciamento de pacotes se propagarão sobre todos os projetos que fazem parte da solução.
Debug¶
Iniciar aplicação em modo de depuração. É o único comando disponível para execução direta de projetos que suportam execução (lembre que bibliotecas não são executáveis).
Build, Rebuild, Clean¶
Os principais comandos para compilação, recompilação (inclusive das dependências) e limpeza de compilações já realizadas. A compilação prepara todos os binários necessários para que um projeto seja executado ou utilizado por um aplicativo executável.
Compilação não é execução
Tanto bibliotecas quanto aplicativos são compiláveis. Apenas projetos do tipo console, windows forms, aspnet (webapi, razor, blazor, etc.) são executáveis. Em ambos os casos, comandos de Build, Rebuild, Clean não executarão o projeto.