Напевно, ви вже працюєте, але це може допомогти комусь іншому в майбутньому. Нещодавно я натрапив на це питання, і це змусило мене рухатись у правильному напрямку і, врешті-решт, призвело до вирішення.
Іншим можливим рішенням для цього є оновлення файлів проекту вручну, щоб націлити на версію MSBuild, з якою ви хочете створити ваші проекти.
Нещодавно я пройшов оновлення сервера збірки TeamCity, і вже встановив на нього Microsoft Build Tools 2015. Я думав, що у мене на сервері збірки є все на місці, у мене було націлене рішення на C # 6.0, і я мав кожен націлений проект .net 4.6.1. Як і ви, все з кодом, характерним для C # 6.0, добре побудований у моєму локальному середовищі, але моєму серверу зборки TeamCity це не сподобалось.
Як згадували інші, я спробував використовувати пакет Microsoft.Net.Compilers NuGet. Остання версія цього сайту дозволила збірці працювати на моєму сервері збирання, але це не дозволило мені публікувати свій код локально (моя вимога). Раніші версії цього пакету 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.
Мені також довелося вручну оновити xget-вузол TargetFrameworkVersion для використання 4.6.1, оскільки VS2015 нічого не робив правильно і зіпсував мою локальну збірку, але це не стосується тут.
Будь ласка, хтось мене виправить, якщо я помиляюся, але просто для довідки, я думаю, що номери версій мають щось подібне:
4,0 = VS2012
12,0 = VS2013
14,0 = VS2015
15,0 = VS2017
Я вважаю, що якщо ви хочете використовувати .net 4.7, вам доведеться встановити Інструменти збирання 2017, а ваші проекти орієнтуватимуться на 15,0 замість 14,0, але я цього не підтвердив.