Come aggiornare msbuild a C # 6?


106

Voglio usare C # 6 nel mio progetto (propagazione nulla, altre funzionalità).

Ho installato VS 2015 sul mio PC e funziona perfettamente e crea codice di test come

var user = new SingleUserModel(); //all model fields are null
var test = user.User?.Avatar?["blah"];

Ma quando eseguo il push del mio progetto nel repository e CI inizia a crearlo, la compilazione non riesce perché non supportata ?.

Ho installato VS2015 anche sul server CI ma ho guardato come se non lo usasse. Cosa posso fare?

CI - CruiseControl .NET Build con C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe


3
Per chiunque scarichi MS Build Tools 2015 dai collegamenti indicati di seguito, si tratta di una vecchia versione (pre-aggiornamento) che presenta bug ... Ho trovato un collegamento qui
all'aggiornamento

Risposte:


164

Assicurati di chiamare:

C:\Program Files (x86)\MSBuild\14.0\Bin\MsBuild.exe

Questa è la versione di MsBuild fornita con Visual Studio 2015 e chiama il compilatore C # che lo comprende. È possibile ottenere questa versione di MsBuild nel sistema installando qualsiasi edizione di Visual Studio 2015 o installando Microsoft Build Tools 2015 autonomo .

L'aggiunta di un riferimento al seguente pacchetto NuGet imporrà anche l'uso del nuovo compilatore:

Install-Package Microsoft.Net.Compilers

Nota: Install-Package sceglierà l'ultima versione disponibile che potrebbe non essere quella che stai cercando. Prima di eseguire l'installazione, controllare le note di rilascio e le dipendenze per risolvere il problema sottostante con la versione trattata, che in questo caso era più specifica per VS 2015.

Quindi per Visual Studio 2015:

Install-Package Microsoft.Net.Compilers -Version 1.0.0

2
ci sono dubbi su questo che causa bug dal momento che RyuJIT o altro ha così tanti bug?
Maslow,

3
Solo una nota su questo, se stai aggiornando la tua variabile PATH env, assicurati di rimuovere la vecchia posizione (es: C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319) perché potrebbe ancora chiamarla durante l'esecuzione "msbuild "da cmd
TheWebGuy

2
Ho dovuto anche installare il pacchetto Microsoft.Net.Compilers Nuget: vedi stackoverflow.com/a/36774876/584714
DrGriff

2
Esiste una soluzione a questo senza dover installare un pacchetto nuget in ogni progetto? Ho centinaia di progetti che avrebbero bisogno di questo e non mi sembra necessario. Sembra un bug da qualche parte.
Cole W

2
Qualcuno ha una risposta alla domanda di @ColeW?
Zinov

61

A proposito, puoi anche installare "Microsoft Build Tools 2015" invece di VS2015 sul tuo server di build.

https://www.microsoft.com/en-us/download/details.aspx?id=48159

Installa MSBuild nello stesso percorso:

C:\Program Files (x86)\MSBuild\14.0\Bin\MsBuild.exe

IMHO c'è una causa, perché la domanda si riferisce a quell'ambiente. Meglio fare un commento alla domanda.
jogo

24
Poiché stackoverflow non mi consente di commentare le domande, l'ho pubblicato nell'unico modo in cui il sistema me lo consente. E se non lo trovi utile, ignoralo. Per me mentre cercavo la soluzione sul mio server di compilazione questa era la strada da percorrere, invece di installare VS2015
MuhKuh

Dopo aver installato "Microsoft Build Tools 2015" (o "Microsoft Build Tools 2017") hai anche il controllo su quale versione di Visual Studio desideri utilizzare per creare la soluzione: MSBuild.exe / t: Build YourSolution.sln / p : VisualStudioVersion = 14.0 [impostalo su 10.0 per VS2010, su 14.0 per VS2015 e 15.0 per VS2017]
Alex Sanséau

Per scaricare e installare Microsoft Build Tools 2015 Update 3 , visita i download di VS precedenti e vai alla Redistributables and Build Toolssezione.
RBT

12

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.