Probabilmente lo hai già funzionante, ma potrebbe aiutare qualcun altro in futuro. Di recente mi sono imbattuto in questa domanda e mi ha fatto muovere nella giusta direzione e alla fine ha portato a una soluzione.
Un'altra possibile soluzione a questo problema è l'aggiornamento manuale dei file di progetto per scegliere come destinazione la versione di MSBuild con cui desideri creare i tuoi progetti.
Di recente ho eseguito un aggiornamento del server di build di TeamCity e ho già installato Microsoft Build Tools 2015 su di esso. Pensavo di avere tutto a posto sul server di compilazione, avevo la mia soluzione destinata a C # 6.0 e ogni progetto aveva come target .net 4.6.1. Come te, tutto con codice specifico per C # 6.0 costruito perfettamente nel mio ambiente locale, ma al mio server di build TeamCity non piaceva niente.
Come accennato da altri, ho provato a utilizzare il pacchetto NuGet Microsoft.Net.Compilers. L'ultima versione di esso ha permesso alla build di funzionare sul mio server di build, ma non mi ha permesso di pubblicare il mio codice localmente (un mio requisito). Le versioni precedenti di quel pacchetto NuGet mi permettevano di pubblicare, ma la build non funzionava.
Quello che ho scoperto che dovevo fare è stato infine modificare ogni file di progetto nella mia soluzione per indirizzare specificamente la versione di MSBuild in grado di gestire il codice C # 6.0. In ciascuno dei miei file di progetto, ho trovato una riga simile alla riga seguente:
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
con il componente chiave di quella riga che è la parte ToolsVersion di essa. Ho semplicemente modificato questa riga nei file di progetto per leggere quanto segue:
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
La differenza qui era che stavo prendendo di mira la versione 14, non 4. La versione 14.0 corrisponde a Build Tools 2015. Modificando questo, il mio server di compilazione TeamCity ha utilizzato la versione corretta di MSBuild ed è stato in grado di creare il mio codice C # 6.0.
Ho anche dovuto aggiornare manualmente il nodo xml TargetFrameworkVersion di questo per utilizzare 4.6.1 perché VS2015 non stava facendo qualcosa di giusto e ha incasinato la mia build locale, ma non è rilevante qui.
Per favore, qualcuno mi corregga se sbaglio, ma solo per riferimento, penso che i numeri di versione siano qualcosa del genere:
4.0 = VS2012
12,0 = VS2013
14,0 = VS2015
15,0 = VS2017
Credo che se volessi usare .net 4.7, dovresti avere Build Tools 2017 installato e avere i tuoi progetti che mirano a 15.0 invece di 14.0, ma non l'ho verificato.