Fitur C # 6.0 Tidak Berfungsi dengan Visual Studio 2015


137

Saya menguji Visual Studio 2015 dengan C # 6.0 tetapi fitur bahasa tidak berfungsi. Dalam aplikasi web MVC, kode berikut dapat dikompilasi:

if (!string.IsNullOrWhiteSpace(Model.Profile?.TypeName))
{
    // More logic here...
}

Namun, ketika saya menjalankan aplikasi melalui Debug dan IIS Express, saya mendapatkan error berikut:

CS1525: Istilah ekspresi tidak valid '.'

Bagaimana cara mengaktifkan fitur ini?


1
Ini terdengar seperti MVC-spesifik (atau setidaknya ASP.NET-spesifik) jadi saya telah menambahkan tag - karena Visual Studio sendiri jelas tahu tentang C # 6 ... Anda harus melihat di mana pun Anda mengkonfigurasi MVC dalam hal versinya NET itu menargetkan ... mungkin ada sesuatu di sana yang akan membiarkan Anda menentukan kompiler yang akan digunakan.
Jon Skeet

Mungkin Anda perlu menambahkan compilerelemen untuk penyedia kode roslyn msdn.microsoft.com/en-us/library/y9x69bzw(v=vs.110).aspx di web.config?
rene

Apakah kode ini ada di halaman aspx atau halaman Razor? atau kode yang ada dalam file .cs?
Erik Funkenbusch

@ErikFunkenbusch Ada di halaman Razor.
Chris Schiffhauer

1
Ya, MVC5 tidak kompatibel dengan Roslyn
Erik Funkenbusch

Jawaban:


211

Ini berfungsi di MVC 5 (diuji 5.2.3), Anda hanya perlu menambahkan paket kode roslyn dom Nuget

Penyedia CodeDOM untuk .NET Compiler ...

Penyedia CodeDOM pengganti yang menggunakan kompilator .NET Compiler Platform ("Roslyn") baru sebagai API layanan. Ini memberikan dukungan untuk fitur bahasa baru dalam sistem yang menggunakan CodeDOM (misalnya, kompilasi runtime ASP.NET) serta meningkatkan kinerja kompilasi sistem ini.

PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/


4
Ini harus diajukan sebagai jawaban, karena memperbaiki masalah daripada harus mengupgrade ke versi beta dari MVC.
Daniel Eugen

3
@Dee kamu salah. The Microsoft.Net.Compilers berhubungan dengan Msbuild. yang Penyedia CodeDOM terkait dengan ASP.NET dan api lainnya adalah bahwa kompilasi pada saat runtime.
jbtule

1
Ya kamu benar. Saya salah membaca / salah tafsir karena terkadang mereka mengubah paket dengan nama baru dan hanya menambahkannya sebagai dependensi.
David De Sloovere

21
Mungkin perlu disebutkan untuk memulai ulang Visual Studio. Itu terus mengeluh setelah saya menginstal paket, tetapi restart membuatnya hilang :)
Siewers

1
@Rono, Pastikan sumber paket Anda nuget.org. Seperti yang Anda lihat dari tautan, itu adalah nama yang benar, dan paketnya ada.
jbtule

18

Nah, saya punya MVC5 dan baru saja menginstal VS 2015.

Saya telah menginstal paket penyedia CodeDOM, tetapi itu tidak membantu ... Tetapi setelah itu saya menyadari, paket itu hanya mendukung kerangka kerja 4.5, sementara saya menetapkan kerangka kerja target ke 4.6 selama pengujian - ini berfungsi dengan 4.5 ...

Jadi perhatikan juga kerangka target. Jika Anda memiliki 4,5 - cukup instal paket Microsoft.CodeDom.Providers.DotNetCompilerPlatform. Tetapi jika Anda memiliki 4.5.1-4.6 sebagai target, Anda harus mengubahnya di bagian web.config

  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701">
          <providerOption name="CompilerVersion" value="v4.0"/>
      </compiler>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>

Untuk C # , cukup ubah tipe menjadi:

type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 

Ini tentu saja membantu saya C# 6untuk bekerja dengan ASP.NET 4.6, tetapi mungkin lebih baik untuk memposting kode dengan benar typesudah ada ...
Serj Sagan

Terima kasih, ini telah berhasil ketika saya pulang pada hari Selasa dan kemudian tidak berfungsi ketika saya kembali pada hari Kamis. Entah bagaimana, bagian konfigurasi ini menjadi AWOL, karena saya ingat melihatnya ketika saya mulai menjalankannya!
Carl

16

Saya mengalami masalah yang sama di Visual Studio 2015. Jawaban lain di sini menyinggung solusi yang saya gunakan, tetapi mereka salah menentukan perbaikan dan tidak pernah memberikan klarifikasi.

Pada menu Visual Studio, pilih Proyek dan Anda akan melihat sub-item Aktifkan C # 6 / VB 14 jika Anda mengalami masalah ini. Pilih sub-item menu ini. Ini akan mengunduh paket yang benar dari Nuget dan menginstalnya. Setelah ini, mulai ulang Visual Studio dan muat ulang solusi Anda.

Saya tidak dapat memverifikasi apakah ini juga akan memperbaiki pilihan Project Properties> Build> Advanced> Language Version ke C # 6 , jadi Anda mungkin ingin memeriksa ini juga setelah mengaktifkan C # 6 dari menu.


2
Sub-item ini tidak ada di menu Proyek saya. Saya memiliki Unity 5.5.2 yang membuka Komunitas VS 2015 saya untuk membuat beberapa skrip. Setelah menambahkan default ke properti, kesalahan kompiler yang ditunjukkan oleh unline merah, menyatakan saya membutuhkan c # 6 karena C # v.4 saat ini dimuat. Setiap kali saya mencoba memilih properti proyek, layar hanya berkedip tetapi tidak ada halaman yang muncul.
Edward

15

Periksa properti proyek Anda, lanjutkan ke build, lanjutan dan lihat apakah C # 6.0 jika Anda tidak memilikinya sebagai default.

Saat ini ada dukungan sempurna untuk MVC5 dan C # 6.0 dan bekerja dengan sangat baik!


18
"Fitur 'operator yang menyebarkan nol' tidak tersedia di C # 5. Harap gunakan bahasa versi 6 atau lebih tinggi." tidak tahu tentang setelan Lanjutan tetapi tampaknya tidak berfungsi di sini.
juFo

3
Bagaimana Anda mengubah versi default ke 6 sehingga saya tidak perlu menyetelnya di setiap proyek?
Mir

3
definisikan "beberapa". ini tidak bekerja di vs 2015 pembaruan 3.
Robert Ivanc

1
Ketika saya sampai pada properti proyek, saya tidak mendapatkan menu build. Jika saya membuka "Halaman Properti", saya mendapatkan menu build, tetapi saya tidak memiliki tombol "lanjutan" di layar build. Terjemahan, "Ini tidak berhasil" (untuk saya)
Malcolm Anderson

Versi VS saya adalah Community 2015 Update 3 (14.0.25431.01)
Malcolm Anderson

10

Termasuk mengikuti saran untuk menginstal yang terbaru, Microsoft.CodeDom.Providers.DotNetCompilerPlatformsaya juga harus mengatur root saya Web.config system.codedomini untuk akhirnya menghilangkan semua kesalahan Visual Studio 2015:

  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>

Sekarang restart Visual Studiodan itu harus dilakukan.


6

Visual Studio 2015 juga akan menampilkan Enable C#6 / VB 14di menu Proyek dengan situs web / aplikasi web ASP.NET dipilih.

Ini secara de facto akan menginstal Microsoft.CodeDom.Providers.DotNetCompilerPlatformdan Microsoft.Net.Compilersmemaketkan ke dalam proyek Anda dan menambahkan tag yang sesuai ke dalam file web.config.

visual studio 2015 - aktifkan cuplikan cs6


1
tab situs web apa? jika yang Anda maksud adalah properti / web, tidak ada fitur seperti itu di sana.
Robert Ivanc

1
Dalam Visual Studio, ketika Anda memilih beberapa proyek WebSite, tab Website muncul di sebelah tab View. Di sana Anda mungkin menemukan fitur ini.
Michal Šuvada

1
Saya telah menurunkan suara untuk saat ini, harap edit untuk mengklarifikasi apa sebenarnya yang Anda maksud, misalnya dengan menambahkan tangkapan layar.
pengguna247702

Saya mencoba memperbaiki masalah dengan Situs Web, dan item menu tersebut tidak tersedia untuk saya. Perhatikan bahwa proyek non-Web lain dalam solusi yang sama tidak memiliki masalah dalam menggunakan fitur VB 14. Mereka semua menargetkan .NET 4.7, dan saya menginstal compiler CodeDom.
Andrew S

-1
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:7 /nowarn:1659;1699;1701" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:15 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.