String Interpolation не будет основываться на TeamCity

Для старого проекта, который я поддерживаю, я выполнял некоторую модернизацию. Это включает в себя различные вещи: нагрузка .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), что именно я должен делать с ними.

Ответ 1

Я чувствую себя оправданным; смешной путь/версия на самом деле указывает на истинную проблему: MSBuild.exe, который выполнялся, был не тем, который был установлен VS2015.

Как я читал здесь, версия MSBuild.exe, которая находится в C:\Windows\Microsoft.NET\Framework\v4.0.30319, на самом деле является версией до С# 6; по какой-то причине установка Visual Studio 2015 делает не эту установку!

Вместо этого вы должны указать свой вызов MSBuild.exe на копию, хранящуюся в C:\Program Files (x86)\MSBuild\14.0\Bin, для компиляции с последней версией С#, как установлено VS2015.