Возможно, у вас это уже работает, но в будущем это может помочь кому-то другому. Недавно я столкнулся с этим вопросом, и он заставил меня двигаться в правильном направлении и в конечном итоге привел к решению.
Другое возможное решение - вручную обновить файлы проекта, чтобы настроить таргетинг на версию MSBuild, с которой вы хотите, чтобы ваши проекты были построены.
Я недавно прошел через обновление сервера сборки TeamCity, и я уже установил на него Microsoft Build Tools 2015. Я думал, что у меня все готово на сервере сборки, у меня было решение, ориентированное на C # 6.0, и у меня были все проекты, ориентированные на .net 4.6.1. Как и вы, все, что связано с кодом C # 6.0, отлично работает в моей локальной среде, но моему серверу сборки TeamCity это не нравится.
Как уже упоминалось другими, я попытался использовать пакет NuGet Microsoft.Net.Compilers. Последняя версия позволяла сборке работать на моем сервере сборки, но не позволяла мне публиковать свой код локально (мое требование). Более ранние версии этого пакета NuGet позволяли мне публиковать, но сборка не работала.
Я обнаружил, что мне нужно было в конечном итоге изменить каждый файл проекта в моем решении, чтобы специально нацелить его на версию MSBuild, которая могла бы обрабатывать код C # 6.0. В каждом из моих файлов проекта я нашел строку, похожую на следующую строку:
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
при этом ключевым компонентом этой строки является ее часть ToolsVersion . Я просто изменил эту строку в своих файлах проекта, чтобы читать следующее:
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
Разница в том, что я нацелился на версию 14, а не на 4. Версия 14.0 соответствует Build Tools 2015. Изменив это, мой сервер сборки TeamCity использовал правильную версию MSBuild и смог собрать мой код C # 6.0.
Мне также пришлось вручную обновить узел xml TargetFrameworkVersion этого, чтобы использовать 4.6.1, потому что VS2015 что-то делал неправильно и испортил мою локальную сборку, но здесь это не актуально.
Пожалуйста, поправьте меня, если я ошибаюсь, но просто для справки, я думаю, что номера версий выглядят примерно так:
4.0 = VS2012
12.0 = VS2013
14.0 = VS2015
15.0 = VS2017
Я считаю, что если вы хотите использовать .net 4.7, вам нужно будет установить Build Tools 2017 и ваши проекты ориентированы на 15.0 вместо 14.0, но я не проверял это.