Для старого проекта, который я поддерживаю, я выполнял некоторую модернизацию. Это включает в себя различные вещи: нагрузка .NET Framework до 4.6 и другие обновления. Одна из вещей, которые нам нужно сделать, это сделать синтаксические обновления, если мы не изменим бизнес-логику.
Мы также недавно установили Visual Studio 2015 и последний и самый большой ReSharper, который показал, что "String Interpolation" теперь мы можем сделать в нашем коде. Для тех, кто не знает, интерполяция строк - это синтаксический сахар над вызовами string.Format
, как показано ниже:
// Normal, pre-C#6 formatting:
var foo = string.Format("Some string {0}", bar);
// C#6 String Interpolation
var foo = $"Some string {bar}";
Это действительно полезно, потому что это облегчает чтение сообщений и обычно занимает меньше символов.
... Однако TeamCity, похоже, не согласен. Когда я ввел код в коммит, я получил следующую ошибку:
Directory\SomeFile.cs: error CS1056: Unexpected character '$' [C:\ProjectDirectory\Project.Core\Project.Core.csproj]
На первый взгляд кажется, что какой-то бит-предшественник предшествует С# 6, потому что это новая функция для С# 6.
Вот что я заметил, поэтому я теоретизирую, что это происходит:
-
Конфигурация сборки указывает на
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
Это дает мне паузу, потому что предположительно .NET 4.6 установлен в нашем агенте сборки. -
При попытке напрямую установить .NET 4.6 из установщика Microsoft это терпит неудачу, потому что .NET 4.6 уже установлен на агент bulid.
-
Наш этап компиляции конфигурации сборки также дает мне паузу. Первые две строки, которые отмечают версию Build Engine и рамки, соответственно,
[exec] Microsoft (R) Build Engine version 4.6.1055.0 [exec] [Microsoft .NET Framework, version 4.0.30319.42000]
Механизм сборки, очевидно, v4.6, но .NET Framework 4.0!? Правильно ли я это читаю? -
Наконец, одна из последних строк журнала сборки:
[NAnt output] External Program Failed: C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe (return code was 1)
Это не 4.6... это?
Вопрос: Дважды. Этот первый вопрос может быть глупым, но я действительно компилирую против .NET 4.6? Во-вторых, каким образом я могу получить синтаксис String Interpolation в С# 6 для фактической сборки, если я укажу на .NET 4.6?
Я явно пропустил что-то обо всем этом, я не уверен, что A), сколько вещей мне не хватает, или B), что именно я должен делать с ними.