Eu estava editando um projeto de ASP.NET Core 2.0 e precisava criar um entry point assíncrono, algo novo no C# 7.1 (ainda vou falar sobre isso). No entanto a feature não funcionava, então fui nas configurações do projeto e habilitei. Isso alterou meu arquivo de projeto (.csproj). Para manter um padrão único, estava indo em cada um dos projetos da solução para fazer o mesmo.
No entanto, na metade do caminho me lembrei que não precisava. Existe uma funcionalidade nova no MSBuild (utilizado para fazer o build quando você utiliza o dotnet
CLI ou o Visual Studio) que permite que os projetos herdem configurações de projeto em diretórios acima do diretório raiz do projeto. Para isso, basta criar um arquivo Directory.Build.props
na raiz da solution com o conteúdo que eu queria. Não há necessidade de alterar qualquer arquivo de solução ou projeto, o arquivo é descoberto automagicamente pelo MSBuild. O conteúdo deve ser o seguinte:
<Project> <PropertyGroup> <LangVersion>latest</LangVersion> </PropertyGroup> </Project>
O padrão é que esse valor esteja configurado como default
, que utiliza sempre a última versão major da linguagem, ou seja, o C# 7.0 no momento atual.
Você encontra mais informações online nos docs de customização de build da Microsoft.
E é bom lembrar que, como as novidades vem no MSBuild, você também pode utilizá-las com Visual Basic.
Não esqueça de fazer o commit do arquivo, ou seus colegas de projeto não conseguirão compilar as novas sintaxes da linguagem, e você vai quebrar a build. 😉
Giovanni Bassi
Arquiteto e desenvolvedor, agilista, escalador, provocador. É fundador e CSA da Lambda3. Programa porque gosta. Acredita que pessoas autogerenciadas funcionam melhor e por acreditar que heterarquia é mais eficiente que hierarquia. Foi reconhecido Microsoft MVP há mais de dez anos, dos mais de vinte que atua no mercado. Já palestrou sobre .NET, Rust, microsserviços, JavaScript, TypeScript, Ruby, Node.js, Frontend e Backend, Agile, etc, no Brasil, e no exterior. Liderou grupos de usuários em assuntos como arquitetura de software, Docker, e .NET.