Per un vecchio progetto che supporto, ho eseguito alcuni interventi di modernizzazione. Ciò ha incluso varie cose: urtare .NET Framework fino a 4.6 e altri aggiornamenti. Una delle cose che abbiamo un po 'di margine di manovra è fare aggiornamenti sintattici, a condizione che non cambiamo la logica di business.String Interpolation non si baserà su TeamCity
Abbiamo anche installato di recente Visual Studio 2015 e l'ultimo e più grande ReSharper, che ha rivelato che "String Interpolation" è ora qualcosa che possiamo fare nel nostro codice. Per coloro che non conoscono, stringa di interpolazione è zucchero sintattico sopra string.Format
chiamate come qui sotto:
// Normal, pre-C#6 formatting:
var foo = string.Format("Some string {0}", bar);
// C#6 String Interpolation
var foo = $"Some string {bar}";
Questo è veramente utile perché rende i messaggi molto più facile da leggere, e di solito da occupare meno caratteri.
... Eppure, TeamCity sembra non essere d'accordo. Quando ho spinto il codice in un commit, ho ottenuto il seguente errore:
Directory\SomeFile.cs: error CS1056: Unexpected character '$' [C:\ProjectDirectory\Project.Core\Project.Core.csproj]
In superficie, sembra come un pre-C# 6 costruttore di qualche tipo è stato colpito, perché questa è una nuova funzionalità a C# 6.
Ecco quello che ho osservato è per questo che teorizzano che questo è quello che sta succedendo:
La configurazione di generazione sta indicando
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
questo mi dà una pausa, a causa presumibilmente .NET 4.6 è installato sul nostro accumulo agente.Nel tentativo di installare direttamente .NET 4.6 dal programma di installazione di Microsoft, tuttavia, non riesce perché .NET 4.6 è già installato sull'agent bulid.
Il passo di compilazione della nostra configurazione build mi dà anche una pausa. Le prime due righe che rilevano rispettivamente la versione di Build Engine e framework sono
[exec] Microsoft (R) Build Engine version 4.6.1055.0 [exec] [Microsoft .NET Framework, version 4.0.30319.42000]
Il motore di build è apparentemente v4.6, ma .NET framework è 4.0 !? Sto leggendo giusto?Infine, una delle righe finali del registro di build:
[NAnt output] External Program Failed: C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe (return code was 1)
Questo è non 4.6 ... è?
Domanda: duplice. Questa prima domanda potrebbe essere stupida, ma sto compilando effettivamente contro .NET 4.6? In secondo luogo, in che modo posso ottenere la sintassi di Interpolazione stringa in C# 6 per la creazione effettiva, se sto puntando su .NET 4.6?
Mi manca chiaramente qualcosa di su tutto questo, non sono sicuro A) quante cose mi mancano, o B) cosa dovrei fare esattamente su di loro.
Per completezza, in realtà non è necessario installare VS2015 su ciascun agente di creazione; può diventare piuttosto ingombrante se ne hai diversi. Basta installare [Microsoft Build Tools 2015] (https://www.microsoft.com/en-us/download/details.aspx?id=48159) e TeamCity dovrebbe ritenerlo soddisfatto nei Requisiti dell'agente. Quindi puoi selezionare Strumento di costruzione 2015 nel tuo passo MSBuild (se è quello che stai usando). – SteveChapman
In realtà usiamo uno script NAnt, con un percorso per il builder che vogliamo usare ... ma, questo è un buon suggerimento! Grazie. –