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:
LangVersionNullableTreatWarningsAsErrors- 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