DEV Community

Daniel Rocha
Daniel Rocha

Posted on

Primeiros passos com C# e o Mono #01

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
Enter fullscreen mode Exit fullscreen mode

Conteúdo dos arquivos

  • main.cs
using System;

namespace App {
    class Root {
        static void Main(string[] args){
            Console.WriteLine("Ola Mundo csproj");
        }
    }
}
Enter fullscreen mode Exit fullscreen mode
  • 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>

Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Depois de executar o programa msbuild, será gerado o arquivo bin e obj, seu programa compilado estará em bin.

Saída do comando msbuid

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 um ItemGrop para bibliotecas de terceiros e outro para suas bibliotecas, e outro pra bibliotecas padrão. No exemplo contém dois ItemGrop , 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.

Mais informações

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

screenshot 1

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

screenshot 1

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>

Enter fullscreen mode Exit fullscreen mode

É 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)