Saya ingin menggunakan C # 6 dalam proyek saya (propagasi null, fitur lainnya).
Saya telah menginstal VS 2015 di PC saya dan berfungsi dengan baik dan membuat kode pengujian seperti
var user = new SingleUserModel(); //all model fields are null
var test = user.User?.Avatar?["blah"];
Tetapi ketika saya mendorong proyek saya ke repo dan CI mulai membangunnya, build gagal karena tidak didukung ?
.
Saya telah menginstal VS2015 di server CI juga tetapi sepertinya tidak menggunakannya. Apa yang dapat saya?
CI - CruiseControl .NET Dibuat dengan C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
Jawaban:
Pastikan Anda menelepon:
Itu adalah versi MsBuild yang disertakan dengan Visual Studio 2015 dan memanggil compiler C # yang memahami hal ini. Anda bisa mendapatkan versi MsBuild ini di sistem Anda dengan menginstal setiap edisi Visual Studio 2015 atau dengan menginstal Microsoft Build Tools 2015 yang berdiri sendiri .
Menambahkan referensi ke paket NuGet berikut juga akan memaksa penggunaan kompilator baru:
Harap dicatat Install-Package akan memilih versi terbaru yang tersedia yang mungkin bukan versi yang Anda cari. Sebelum Anda menginstal, periksa catatan rilis dan dependensi untuk menyelesaikan masalah mendasar dengan versi yang ditangani, yang dalam hal ini, lebih spesifik untuk VS 2015.
Jadi untuk Visual Studio 2015:
sumber
Anda juga dapat menginstal "Microsoft Build Tools 2015" sebagai ganti VS2015 di server build Anda.
https://www.microsoft.com/en-us/download/details.aspx?id=48159
Ini menginstal MSBuild ke jalur yang sama:
sumber
Redistributables and Build Tools
bagian.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:
dengan komponen kunci dari baris tersebut menjadi bagian ToolsVersion . Saya hanya mengubah baris ini pada file proyek saya untuk membaca yang berikut:
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.
sumber