Probablemente ya tenga esto funcionando, pero esto podría ayudar a alguien más en el futuro. Me encontré con esta pregunta recientemente y me hizo avanzar en la dirección correcta y finalmente me llevó a una solución.
Otra posible solución a esto es actualizar manualmente los archivos de su proyecto para apuntar a la versión de MSBuild con la que desea que se compilen sus proyectos.
Recientemente pasé por una actualización del servidor de compilación de TeamCity y ya instalé Microsoft Build Tools 2015 en él. Pensé que tenía todo en su lugar en el servidor de compilación, tenía mi solución dirigida a C # 6.0 y todos los proyectos tenían como objetivo .net 4.6.1. Al igual que usted, todo con código específico de C # 6.0 construido muy bien en mi entorno local, pero a mi servidor de compilación TeamCity no le gustó nada de eso.
Como lo mencionaron otros, intenté usar el paquete Microsoft.Net.Compilers NuGet. La última versión permitió que la compilación funcionara en mi servidor de compilación, pero no me permitió publicar mi código localmente (un requisito mío). Las versiones anteriores de ese paquete NuGet me permitirían publicar, pero la compilación no funcionaría.
Lo que descubrí que tenía que hacer era modificar en última instancia cada archivo de proyecto en mi solución para apuntar específicamente a la versión de MSBuild que pudiera manejar el código C # 6.0. En cada uno de mis archivos de proyecto, encontré una línea similar a la siguiente línea:
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
siendo el componente clave de esa línea la parte de ToolsVersion . Simplemente cambié esta línea en mis archivos de proyecto para leer lo siguiente:
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
La diferencia aquí fue que estaba apuntando a la versión 14, no a la 4. La versión 14.0 corresponde con Build Tools 2015. Al cambiar esto, mi servidor de compilación TeamCity usó la versión correcta de MSBuild y pudo compilar mi código C # 6.0.
También tuve que actualizar manualmente el nodo xml TargetFrameworkVersion de esto para usar 4.6.1 porque VS2015 no estaba haciendo algo bien y arruinó mi compilación local, pero eso no es relevante aquí.
Por favor, alguien me corrija si me equivoco, pero solo como referencia, creo que los números de versión son algo como esto:
4.0 = VS2012
12.0 = VS2013
14.0 = VS2015
15,0 = VS2017
Creo que si quisieras usar .net 4.7, tendrías que tener las Herramientas de compilación 2017 instaladas y que tus proyectos apunten a 15.0 en lugar de 14.0, pero no lo he verificado.