W przypadku starego projektu, który popieram, dokonałem pewnych modernizacji. Obejmuje to różne rzeczy: wpadanie w .NET Framework do wersji 4.6 i inne uaktualnienia. Jedną z rzeczy, które mamy do wykonania, jest wykonanie aktualizacji składniowych, o ile nie zmienimy logiki biznesowej.Interpolacja z ciągami nie będzie opierać się na TeamCity
Niedawno zainstalowaliśmy również Visual Studio 2015 oraz najnowszy i najlepszy program ReSharper, który ujawnił, że "interpolacja ciągów" jest teraz czymś, co możemy zrobić w naszym kodzie. Dla tych, którzy nie wiedzą, interpolacja ciąg jest cukier syntaktyczny nad string.Format
połączeń, jak poniżej:
// Normal, pre-C#6 formatting:
var foo = string.Format("Some string {0}", bar);
// C#6 String Interpolation
var foo = $"Some string {bar}";
Jest to bardzo przydatne, ponieważ to sprawia, że komunikaty o wiele łatwiejsze do odczytania, a zazwyczaj poprzez objęcie mniej znaków.
... Jednak TeamCity wydaje się nie zgadzać. Kiedy pchnął kodu w górę w commit, mam następujący błąd:
Directory\SomeFile.cs: error CS1056: Unexpected character '$' [C:\ProjectDirectory\Project.Core\Project.Core.csproj]
Na pierwszy rzut oka wydaje się, że pre-C# 6 budowniczego jakiejś jest bycie hitem, ponieważ jest to nowa funkcja do C# 6.
Oto co zaobserwowali, że dlatego teoretyzować, że to, co się dzieje:
Konfiguracja build jest skierowany do
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
To daje mi wstrzymać, ponieważ przypuszczalnie .NET 4.6 jest zainstalowany na naszej budowie agent.Jednak próba bezpośredniej instalacji .NET 4.6 z instalatora firmy Microsoft nie powiedzie się, ponieważ program .NET 4.6 jest już zainstalowany w agencie bulid.
Nasz etap kompilacji konfiguracji kompilacji również daje mi pauzę. Dwie pierwsze linie, które odnotowują odpowiednio wersję silnika budowania i architektury, to:
[exec] Microsoft (R) Build Engine version 4.6.1055.0 [exec] [Microsoft .NET Framework, version 4.0.30319.42000]
Silnik kompilacji najwyraźniej v4.6, ale framework .NET to 4.0 !? Czy to czytam, prawda?Wreszcie jedna z ostatnich linii dziennika budowy:
[NAnt output] External Program Failed: C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe (return code was 1)
To jest nie 4.6 ... czy to jest?
Pytanie: dwojaki. To pierwsze pytanie może być głupie, ale czy rzeczywiście kompiluję się przeciwko .NET 4.6? Po drugie, w jaki sposób można uzyskać składnię String Interpolation w C# 6 do rzeczywistej kompilacji, jeśli wskazuję na .NET 4.6?
Ja wyraźnie brakuje coś o tym wszystkim, nie jestem pewien A) ile rzeczy brakuje mi, lub B) co dokładnie powinienem zrobić z nimi.
Dla kompletności, nie trzeba instalować VS2015 na każdym agencie kompilacji; może to być dość uciążliwe, jeśli masz kilka. Po prostu zainstaluj [Microsoft Build Tools 2015] (https://www.microsoft.com/en-us/download/details.aspx?id=48159) i TeamCity powinien wybrać to jako spełnione w wymaganiach agenta. Następnie możesz wybrać Build Tool 2015 na swoim kroku MSBuild (jeśli tego właśnie używasz). – SteveChapman
Używamy skryptu NAnt ze ścieżką do konstruktora, którego chcemy użyć ... ale to dobra sugestia! Dzięki. –