Estrutura do .csproj (SDK-style)
ResumoO
.csprojé o arquivo de projeto (MSBuild). No formato SDK-style ele é curtíssimo: declara o SDK, o alvo (TargetFramework) e algumas propriedades. Os arquivos.cssão incluídos automaticamente.
1. Objetivos de Aprendizagem#
- Ler e entender um
.csprojSDK-style. - Conhecer propriedades comuns (
TargetFramework,Nullable,ImplicitUsings). - Saber onde entram pacotes e referências.
2. Pré-requisitos#
- Ter criado um projeto com a CLI (tópico 1.3).
3. Conceito#
O .csproj descreve como o projeto é compilado. No formato antigo ele listava cada arquivo; no SDK-style (o padrão atual) tudo é convenção: qualquer .cs na pasta entra automaticamente. O porquê: menos ruído, menos conflitos de merge, mais foco no código.
Elementos principais:
Sdk="Microsoft.NET.Sdk"— o tipo de projeto (Web usaMicrosoft.NET.Sdk.Web).<TargetFramework>— o TFM alvo (net9.0).<PropertyGroup>— propriedades de build.<ItemGroup>— pacotes (PackageReference) e referências (ProjectReference).
4. Mão na Massa#
4.1. Setup#
dotnet new classlib -n Catalog.Domain
4.2. Implementação Passo a Passo#
- Abra o
.csprojgerado:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
- Entenda cada propriedade:
ImplicitUsings=enable— adicionausingglobais comuns (System,System.Collections.Generic…) sem você declarar.Nullable=enable— liga os nullable reference types (avisos de possívelnull).
- Adicione um pacote e veja o
ItemGroupsurgir:
dotnet add package Microsoft.Extensions.Logging.Abstractions
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.0" />
</ItemGroup>
4.3. Executando#
dotnet build
5. Exemplo Completo#
Um .csproj de biblioteca com net9.0, Nullable e ImplicitUsings habilitados, mais um PackageReference, já representa a configuração típica de um projeto moderno.
6. Boas Práticas e Armadilhas#
| Faça | Evite |
|---|---|
Manter Nullable e ImplicitUsings habilitados | Listar arquivos .cs manualmente (formato legado) |
Deixar a CLI editar o ItemGroup | Digitar versões de pacote à mão com erros de digitação |
Atençãoo
.csprojé XML sensível. Uma tag mal fechada quebra o build inteiro com mensagens pouco óbvias.
7. Segurança e Produção#
- Propriedades como
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>ajudam a barrar código problemático antes do deploy.
8. Exercícios#
- Fácil: identifique o
TargetFrameworkde um projeto seu. - Médio: habilite
TreatWarningsAsErrorse observe o efeito. - Desafio: pesquise o que faz
<LangVersion>e defina-a explicitamente.
9. Resumo#
O .csproj SDK-style é enxuto: SDK + TargetFramework + propriedades; arquivos .cs entram por convenção, e pacotes/referências ficam em ItemGroup.
10. Próximos Passos#
A seguir, organizar múltiplos projetos em uma solution.
11. Referências#
- Microsoft Learn — Visão geral de projetos SDK-style
- Microsoft Learn — Propriedades comuns do MSBuild
- Microsoft Learn — Implicit usings