Anda mungkin sudah memiliki ini berfungsi, tetapi ini mungkin membantu orang lain di masa depan. Saya menemukan pertanyaan ini baru-baru ini dan itu membuat saya bergerak ke arah yang benar dan akhirnya mengarah pada solusi.
Solusi lain yang mungkin untuk ini adalah memperbarui file proyek Anda secara manual untuk menargetkan versi MSBuild yang Anda inginkan untuk membangun proyek Anda.
Saya baru-baru ini melalui pembaruan server build TeamCity dan saya sudah menginstal Microsoft Build Tools 2015 di dalamnya. Saya pikir saya memiliki segalanya di server build, solusi saya menargetkan C # 6.0, dan saya memiliki setiap project yang menargetkan .net 4.6.1. Seperti Anda, semuanya dengan kode khusus C # 6.0 dibangun dengan baik di lingkungan lokal saya, tetapi server build TeamCity saya tidak menyukainya.
Seperti yang disebutkan oleh orang lain, saya mencoba menggunakan paket Microsoft.Net.Compilers NuGet. Versi terbaru memungkinkan build berfungsi di server build saya, tetapi tidak mengizinkan saya mempublikasikan kode saya secara lokal (persyaratan saya). Versi sebelumnya dari paket NuGet memungkinkan saya menerbitkannya, tetapi build tidak akan berfungsi.
Apa yang saya temukan yang harus saya lakukan pada akhirnya adalah memodifikasi setiap file proyek dalam solusi saya untuk secara khusus menargetkan versi MSBuild yang dapat menangani kode C # 6.0. Di setiap file proyek saya, saya menemukan baris yang mirip dengan baris berikut:
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
dengan komponen kunci dari baris tersebut menjadi bagian ToolsVersion . Saya hanya mengubah baris ini pada file proyek saya untuk membaca yang berikut:
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
Perbedaannya di sini adalah saya menargetkan versi 14, bukan 4. Versi 14.0 sesuai dengan Build Tools 2015. Dengan mengubahnya, server build TeamCity saya menggunakan versi MSBuild yang benar dan dapat membuat kode C # 6.0 saya.
Saya juga harus memperbarui node xml TargetFrameworkVersion ini secara manual untuk menggunakan 4.6.1 karena VS2015 tidak melakukan sesuatu dengan benar dan mengacaukan build lokal saya, tetapi itu tidak relevan di sini.
Tolong, seseorang mengoreksi saya jika saya salah, tetapi hanya untuk referensi, saya pikir nomor versinya seperti ini:
4.0 = VS2012
12.0 = VS2013
14.0 = VS2015
15.0 = VS2017
Saya yakin jika Anda ingin menggunakan .net 4.7, Anda harus menginstal Build Tools 2017 dan proyek Anda menargetkan 15.0, bukan 14.0, tetapi saya belum memverifikasi ini.