Capítulos |
---|
#00 - Instalação e compilador C# |
#01 - Sistema de build e importação de pacotes |
#02 - Configurando ambiente de desenvolvimento |
Esse post é mais um lembrete. Depois de verificar como compilar arquivos C# e como referenciar bibliotecas pelo terminal, comecei a procurar como facilitar a compilação e importação de módulos de terceiros. Primeiro dei uma olhada no make e Makefile, mas não é o padrão de projetos C#. Já sabia que muitos projetos usavam um arquivo de extensão: "extensão da linguagem" + "proj", comecei a fuçar a internet procurando pela documentação desse tipo arquivo de projeto, encontrei na documentação da Microsoft csproj, MSBuild, Tutorial Microsoft para um arquivo de projeto do Zero.
Criando um arquivo simples de projeto
- Arvore de diretórios:
.
├── main.cs
└── main.csproj
Conteúdo dos arquivos
- main.cs
using System;
namespace App {
class Root {
static void Main(string[] args){
Console.WriteLine("Ola Mundo csproj");
}
}
}
- main.csproj
<?xml version="1.0"?>
<Project>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="main.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
Compilando
Vamos usar o Microsoft Build Engine, o MSBuild, mas uma pergunta pode surgir: O mono não fornece um Build Engine? E a resposta é sim, o xbuild, mas esta depreciado e nas versões futuras está previsto para ser removido, ao chamar o xbuild no terminal é emitido a seguinte mensagem: ">>>> xbuild tool is deprecated and will be removed in future updates, use msbuild instead <<<<". Por isso vamos usar o MSBuild.
Comando
msbuild
Se houver mais de um ".csproj" ou ".proj" no diretório de chamada do msbuild, o arquivo de projeto especifico deve ser passado como parâmetro.
msbuild outro.csproj
Depois de executar o programa msbuild, será gerado o arquivo bin e obj, seu programa compilado estará em bin.
Saída do comando msbuid
Vamos analisar o ".csproj"
Você pode verificar que o arquivo de projeto está bem "anêmico", escrevi desse modo pra facilitar o meu entendimento, porque é a primeira vez que uso um xml, achei bem simples o entendimento do xml, porque funciona com a estrutura chave, valor e atributos, e é bem semelhante ao HTML.
- <Project> É o tag/nó principal e obrigatório do projeto e ele irá conter as configurações do seu projeto
-
<ItemGroup>
Grupo que irá receber os itens de configuração, vocẽ pode inserir quantos
ItemGrop
que desejar e que faça sentido a separação dos grupos. Você pode separar umItemGrop
para bibliotecas de terceiros e outro para suas bibliotecas, e outro pra bibliotecas padrão. No exemplo contém doisItemGrop
, um para referenciar a biblioteca padrão e outro para referenciar os arquivos de compilação feitas pelo usuário.
-
<Import>
Importa o conteúdo de um arquivo de projeto para outro arquivo de projeto. A propriedade
$(MSBuildToolsPath)
é o conjunto ferramentas que especifica o caminho das ferramentas do .NET.
Pacotes NuGet
NuGet é o gerenciador de pacotes do .NET, mas vamos obter apenas os pacotes do seu repositório. Como já sabemos um pouco como o arquivo de projeto funciona, podemos agora usar pacotes de terceiros disponíveis no NuGet.
Eu vou utilizar o pacote System.Data.SQLite.Core, mas ele não é necessário pra utilizar o SQLite no Mono, porque o Mono disponibiliza a biblioteca Mono.Data.Sqlite. Lembrando que esse modo de importação pode ser usado em qualquer pacote disponível no NuGet.
Vamos obter a referencia do pacote no NuGet.
- Acesse o site
- Pesquise o nome do pacote: System.Data.SQLite
Na pagina do pacote
Observe a seção marcada com um retângulo vermelho, há quatro modos de importar o pacote para seu projeto. Vamos usar o modo de PackageReference
Crie um ItemGroup e adicione suas referencias dos pacotes do NuGet. O arquivo de projeto ficará assim:
<?xml version="1.0"?>
<Project>
<!-- Referências para os pacotes standard -->
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
</ItemGroup>
<!-- Pacotes do NuGet -->
<ItemGroup>
<PackageReference Include="System.Data.SQLite" Version="1.0.113.1" />
</ItemGroup>
<!-- Arquivos do projeto -->
<ItemGroup>
<Compile Include="database/sqlite.cs" />
<Compile Include="app.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
É bastante intuitiva o arquivo de projeto. Para obter localmente a biblioteca do NuGet, use o comando msbuild -restore.
A Microsoft possui uma documentação muito boa e podemos aprender muito com ela. Se você usa uma IDE, ela faz tudo isso e muito mais configurações no seu projeto, mas como o objetivo é aprendizagem, então vale apena usar os programas que estão automatizados por baixo dos panos da IDE.
Top comments (0)