Desejo usar C # 6 em meu projeto (propagação nula, outros recursos).
Instalei o VS 2015 no meu PC e ele funciona de maneira brilhante e cria códigos de teste como
var user = new SingleUserModel(); //all model fields are null
var test = user.User?.Avatar?["blah"];
Mas quando eu envio meu projeto para o repo e o CI começa a compilá-lo, a compilação falha por não ser compatível ?
.
Também instalei o VS2015 no servidor CI, mas parece que não o usa. O que eu posso fazer?
CI - CruiseControl .NET Builds with C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
Respostas:
Certifique-se de ligar para:
Essa é a versão do MsBuild que acompanha o Visual Studio 2015 e chama o compilador C # que entende isso. Você pode obter esta versão do MsBuild em seu sistema instalando qualquer edição do Visual Studio 2015 ou instalando o autônomo Microsoft Build Tools 2015 .
Adicionar uma referência ao seguinte pacote NuGet também forçará o uso do novo compilador:
Observe que o Install-Package escolherá a versão mais recente disponível, que pode não ser a que você está procurando. Antes de instalar, verifique as notas de lançamento e dependências para resolver o problema subjacente com a versão sendo tratada, que neste caso, era mais específico para VS 2015.
Então, para Visual Studio 2015:
fonte
A propósito, você também pode instalar o "Microsoft Build Tools 2015" em vez do VS2015 em seu servidor de compilação.
https://www.microsoft.com/en-us/download/details.aspx?id=48159
Ele instala o MSBuild no mesmo caminho:
fonte
Redistributables and Build Tools
seção.Você provavelmente já fez isso funcionar, mas isso pode ajudar outra pessoa no futuro. Eu me deparei com essa questão recentemente e ela me fez seguir na direção certa e, finalmente, me levou a uma solução.
Outra solução possível para isso é atualizar manualmente seus arquivos de projeto para direcionar a versão do MSBuild com a qual você deseja que seus projetos sejam criados.
Recentemente, passei por uma atualização do servidor de compilação TeamCity e já instalei o Microsoft Build Tools 2015 nele. Achei que tinha tudo pronto no servidor de compilação, tinha minha solução voltada para C # 6.0 e todos os projetos voltados para .net 4.6.1. Como você, tudo com código específico do C # 6.0 construído perfeitamente em meu ambiente local, mas meu servidor de compilação TeamCity não gostou de nada disso.
Conforme mencionado por outros, tentei usar o pacote NuGet Microsoft.Net.Compilers. A versão mais recente permitiu que a construção funcionasse no meu servidor de construção, mas não me deixou publicar meu código localmente (um requisito meu). Versões anteriores desse pacote NuGet me permitiam publicar, mas a construção não funcionava.
O que descobri que tinha que fazer foi modificar cada arquivo de projeto em minha solução para direcionar especificamente a versão do MSBuild que poderia lidar com o código C # 6.0. Em cada um dos meus arquivos de projeto, encontrei uma linha semelhante à seguinte:
com o componente principal dessa linha sendo a parte ToolsVersion dela. Simplesmente mudei esta linha em meus arquivos de projeto para ler o seguinte:
A diferença aqui era que eu estava visando a versão 14, não 4. A versão 14.0 corresponde ao Build Tools 2015. Ao alterar isso, meu servidor de build TeamCity usou a versão correta do MSBuild e foi capaz de construir meu código C # 6.0.
Eu também tive que atualizar manualmente o nó xml TargetFrameworkVersion deste para usar 4.6.1 porque o VS2015 não estava fazendo algo certo e bagunçou minha compilação local, mas isso não é relevante aqui.
Por favor, alguém me corrija se eu estiver errado, mas apenas para referência, acho que os números das versões são mais ou menos assim:
4.0 = VS2012
12,0 = VS2013
14,0 = VS2015
15.0 = VS2017
Eu acredito que se você quisesse usar .net 4.7, você teria que ter o Build Tools 2017 instalado e ter seus projetos visando 15.0 em vez de 14.0, mas eu não verifiquei isso.
fonte