Skip to main content

Import csproj Global | CSharp

  • Import csproj Global | CSharp

🎯 Objetivo

Centralizar configurações comuns a múltiplos projetos em uma solution, evitando duplicação e garantindo consistência entre os builds.


🧱 Estrutura recomendada

/MinhaSolution
├── Directory.Build.props # Propriedades globais (importadas antes dos .csproj)
├── Directory.Build.targets # Targets globais (importados após os .csproj)
├── Directory.Packages.props # Versões de pacotes NuGet centralizadas
├── ProjetoA/
│ └── ProjetoA.csproj
├── ProjetoB/
│ └── ProjetoB.csproj

Directory.Build.props

✔️ Função

Carregado antes dos .csproj. Define propriedades globais como:

  • LangVersion
  • Nullable
  • TreatWarningsAsErrors
  • Diretórios de saída
  • Defines globais

📄 Exemplo

<Project>
<PropertyGroup>
<LangVersion>12.0</LangVersion>
<Nullable>enable</Nullable>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<Deterministic>true</Deterministic>
</PropertyGroup>
</Project>

Directory.Build.targets

✔️ Função

Carregado depois dos .csproj. Permite definir ações de build (ex: pós-build, geração de arquivos, mensagens etc.).

📄 Exemplo

<Project>
<Target Name="AfterBuild">
<Message Importance="high" Text="Build finalizado com sucesso." />
</Target>
</Project>

📦 Directory.Packages.props

✔️ Função

Centraliza a gestão de versões de pacotes NuGet, evitando duplicação de versões nos .csproj.

📄 Exemplo

<Project>
<ItemGroup>
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
<PackageVersion Include="Serilog" Version="2.12.0" />
<PackageVersion Include="FluentValidation" Version="11.7.1" />
</ItemGroup>
</Project>

No .csproj, você referencia o pacote sem versão:

<PackageReference Include="Newtonsoft.Json" />

📌 Observações

  • Esses arquivos são aplicados recursivamente a todos os projetos que estejam em subpastas.
  • São suportados apenas por projetos no estilo SDK (<Project Sdk="...").
  • Propriedades e versões definidas nesses arquivos podem ser sobrescritas localmente, mas não é recomendado.

✅ Benefícios

  • Consistência entre projetos
  • Redução de duplicação
  • Manutenção centralizada
  • Melhor controle de versão de pacotes
  • Ideal para grandes soluções ou ambientes com CI/CD