CS1617: Opsi '6' tidak valid untuk / langversion; harus ISO-1, ISO-2, 3, 4, 5 atau Default

92

Terus mendapatkan kesalahan itu saat menjalankan aplikasi ASP.NET MVC baru (langsung dari Komunitas VS 2015) di mesin Windows 2008 Server.

Kyle Carlson
sumber
3
Turunkan versi bahasa ke 5. Lihat: Cara mengubah versi Bahasa
NASSER
Dalam kasus saya, saya telah memutakhirkan System.Web.Mvc.dll dari versi 5.2.3 ke 5.2.7, itu memperbaiki masalah ini karena versinya salah.
Dino Liu
Pada tahun 2019 terjadi kesalahan serupa . Lihat juga masalah GitHub terkait ini .
Uwe Keim

Jawaban:

105

Banyak orang yang mengalaminya, jadi saya ingin memposting di sini.

Menemukan solusi yang sangat mudah berkat orang ini: Expertdebugger .

Cukup turunkan versi bahasa Anda dari C # 6 ke C # 5, seperti ini:

<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.VisualBasic.VBCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+">
          <providerOption name="CompilerVersion" value="v4.0"/>
      </compiler>
    </compilers>
</system.codedom>

Ubah ke langversion:6arah bawah dari 6 menjadi 5 -langversion:5

Memperbaiki itu untuk saya. Berterimakasihlah padanya.

Kyle Carlson
sumber
1
Terima kasih banyak yang telah membantu saya.
AH.
28
Itu hanya memberi tahu kompilator untuk mengkompilasi dengan C # versi 5, bukan 6, yang bukan yang Anda inginkan jika Anda membuat proyek .NET 4.6 ... Yang benar-benar perlu Anda ubah adalah jenis kompilator, seperti yang ditampilkan di jawaban lain untuk pertanyaan ini!
Nuno Agapito
1
Atau hapus blok <system.codedom> itu sendiri, itu juga akan memperbaiki masalah.
Anupam Singh
5
Ubah ini dimana? Maksud saya di mana saya harus meletakkan kode ini?
dipecahkan
Letakkan di file web.config atau app.config Anda
csharpforevermore
82

Jika Anda ingin menggunakan C # 6.0:

  1. Pastikan versi .NET proyek Anda lebih tinggi dari 4.5.2.
  2. Dan kemudian periksa .configfile Anda untuk melakukan modifikasi berikut.

Cari system.codedomdan modifikasi sehingga akan terlihat seperti gambar di bawah ini:

<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>
chsword
sumber
Itulah yang saya cari. Saya mulai mendapatkan kesalahan ini setelah memutakhirkan proyek ASP.NET MVC dari .NET Framework 4.5.2 ke 4.6. Saya tidak yakin, tapi saya pikir akan lebih baik jika Visual Studio memperbarui baris itu dengan sendirinya.
Zignd
3
Ini harus menjadi jawaban yang benar karena ini benar-benar memperbaiki masalah dan memungkinkan kompiler untuk menggunakan versi terbaru alih-alih kembali ke versi lama
SM3RKY
1
Setuju dengan SM3RKY - jawaban ini lebih relevan karena menyelesaikan masalah, daripada mengabaikannya!
Jon Story
Jika Anda memutakhirkan solusi Anda ke .net 4.6 untuk proyek yang ada menggunakan Komunitas VS 2015 atau di bawahnya kesalahan ini terjadi. Setelah memperbarui VS 2015 Pembaruan 3, perbaikan ini datang secara default untuk proyek baru. Namun jawabannya adalah perbaikan yang tepat!
Mahmut C
Ini memperbaiki masalah saya dalam proyek .Net 4.6.2 menggunakan ASP.NET (formulir web) dan VB.NET
Eric Hewett
14

Saya menemukan bahwa penyebab langsung kesalahan dalam kasus saya adalah:

build -> lanjutan -> versi bahasa

ini masuk akal karena kesalahan menyatakan bahwa ada opsi yang tidak valid untuk bahasa.

tapi, ini berfungsi dengan baik sebelumnya - jadi pasti sudah dipilih. apa yang berubah? ternyata anggota di tim saya ditingkatkan ke vs 2017, sementara saya masih menggunakan 2015. setelah dia membuat perubahan pada proyek, versi bahasa diubah dan saya menerima perubahan itu atas kendali sumber. tetapi versi yang dipilih tidak tersedia untuk versi saya, jadi itu kosong - karena itu terjadi kesalahan. setelah memilih nilai dalam drop down bahasa (saya memilih default), kesalahan baru muncul. kesalahan baru menyebabkan kegagalan build pada setiap baris kode yang menggunakan versi c # yang lebih baru. saya mengubah kode untuk melakukan fungsi yang sama, tetapi dengan sintaks versi c # saya dan masalah terpecahkan.

jadi meskipun penyebab langsung kesalahan adalah pemilihan Versi Bahasa yang tidak valid, akar penyebabnya adalah karena perbedaan versi vs / c #.

Heriberto Lugo
sumber
1
Jawaban ini membantu saya setelah memeriksa semua yang lain. terima kasih
MindRoasterMir
1
Jawaban ini juga berlaku untuk kasus saya di mana saya mencoba menjalankan proyek yang disetel ke C # 8, tetapi tidak didukung di studio visual saya 2017. Hanya VS 2019
Vinícius Gabriel
13

Dalam kasus saya, kesalahannya adalah:

Kesalahan CS1617 Opsi 'terbaru' tidak valid untuk / bahasa; harus ISO-1, ISO-2, Default atau bilangan bulat dalam rentang 1 hingga 6.

Saya membuka file .csproj saya dengan notepad dan saya melihat baris ini:

<PropertyGroup>
    <LangVersion>latest</LangVersion>
</PropertyGroup>

Saya mengubah terbaru untuk bilangan bulat dalam rentang 1 hingga 6

<LangVersion>6</LangVersion>

Kesalahannya hilang!

nahuelmisc.dll
sumber
Terima kasih banyak! Sekarang debugging di VS2015 dan Unity2018 berfungsi
8Observer8
Tidak perlu persis dibuka di notepad tetapi dari studi visual seseorang dapat mengunggah proyek dan kemudian mengedit proyek, yang juga akan memperbaiki masalah ini.
Shantu
12

Dalam kasus saya, saya menggunakan MSBuild.exe yang salah, yang ditemukan di:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319

Untuk mengatasi kesalahan, saya memperbarui variabel lingkungan PATH saya untuk mulai menggunakan Visual Studio 2017 MSBuild.exe:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSbuild.exe

Silakan lihat tautan ini untuk detailnya: Kesalahan CS1056: Karakter tak terduga '$' menjalankan msbuild pada proses integrasi berkelanjutan tfs

pengguna8128167
sumber
Sama di sini, dalam kasus saya, saya menginstal MSBuild Tools dan menggunakan msbuild dari "C: \ Program Files (x86) \ MSBuild \ 14.0 \ Bin \ MSBuild.exe"
falstaff
10

dalam kasus saya (buat proyek di sistem lain):

  1. proyek bersih (klik kanan pada proyek di explorer solusi dan klik item bersih).
  2. lalu bangun proyek (klik kanan pada proyek di explorer solusi dan klik item build).

Saya dapat menjalankan proyek ini.

Ali Rasouli
sumber
5

Alih-alih mengubah versi bahasa dari 6 menjadi 5, ubah atribut "type" pada tag kompilator dari

Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

untuk

Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Nwachukwu A. Nnaemeka
sumber
4

Tingkatkan paket Microsoft.Net.Compilers Nuget ke versi terbaru (minimal 2.x)

wnbates.dll
sumber
3

Solusi termudah bagi saya adalah mengupgrade .Net Compiler melalui Package Manager

Instal-Paket Microsoft.Net.Compilers

dan kemudian mengubah baris Web.Config menjadi ini

<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>
Mike
sumber
1

Ternyata ini adalah masalah, karena proyek ASP.NET MVC 4 merujuk ke versi tertentu dari paket Microsoft.Net.Compilers. Visual Studio menggunakan kompiler dari paket khusus ini, dan bukan kompiler yang diinstal sebaliknya di komputer.

Peringatan atau sesuatu akan menyenangkan dari VS2019 :-)

Solusinya adalah dengan memperbarui paket Microsoft.Net.Compilers ke versi yang lebih baru.

Versi 1.x untuk C # 6 Versi 2.x untuk C # 7 Versi 3.x untuk C # 8 Bagaimana saya bisa menyelesaikannya tidak segera jelas. Visual Studio dapat menyarankan atau mengisyaratkan bahwa dengan saya memilih versi baru dalam pengaturan proyek pengaturan yang sekarang bertentangan dengan paket yang diinstal ke dalam proyek.

(Saya akhirnya mengaktifkan logging MSBuild level Diagnostik untuk mengetahui CSC.EXE mana yang benar-benar coba digunakan IDE)

https://developercommunity.visualstudio.com/content/problem/519531/c-7x-versions-do-not-seem-to-work-in-vs2019.html

B1zzle
sumber
0

Saya telah memperbarui Microsoft.Net.Compilers ke versi 2.0 atau lebih tinggi

Lihat ini

davcup
sumber
0

Saya baru saja mengubah langversionmenjadi defaultdan itu berhasil untuk saya. VS 2015

<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:default /nowarn:1659;1699;1701″>
    <providerOption name=”CompilerVersion” value=”v4.0″/>
  </compiler>
  <compiler language=”vb;vbs;visualbasic;vbscript” extension=”.vb” type=”Microsoft.VisualBasic.VBCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089″ warningLevel=”4″ compilerOptions=”/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+”>
      <providerOption name=”CompilerVersion” value=”v4.0″/>
  </compiler>
</compilers>

Kumar
sumber
0

Solusi Bersih dan Bangun lagi Dalam kasus saya, apa pun pengaturan sebelumnya yang memblokir karena ketidakcocokan. Saya mengimpor proyek baru dan membangunnya, mencoba mengubah versi dan semuanya. bersihkan solusi dan build berhasil untuk saya.

Sumanstm21
sumber
0

Dalam kasus saya, saya mengunduh perpustakaan dengan kode contoh implementasi keycloak oleh mattorg dari GITHUB: https://github.com/mattmorg55/Owin.Security.Keycloak/tree/dev/samples

Solusinya cukup mudah, karena saya menggunakan .Net Framework 4.6.1, tetapi proyek tersebut meminta saya pada awalnya untuk menggunakan 4.6.2. Meskipun saya mengunduhnya, itu pertama kali secara aktif dipilih, ketika restart semua contoh Visual Studion (atau lebih baik tutup semua contoh). Proyek ini dimanipulasi menjadi 4.6.1 (meskipun saya tidak ingin dan memilihnya).

Jadi setelah saya memilih konfigurasi lagi untuk memilih .Net Framework 4.6.1 kesalahan langsung hilang.

pedda
sumber
0

Dalam kasus saya, pesan kesalahannya adalah:

ASPNETCOMPILER: kesalahan CS1617: Opsi '7.3' tidak valid untuk / langversion; harus ISO-1, ISO-2, Default atau bilangan bulat dalam rentang 1 hingga 6.

Seperti yang dinyatakan dalam masalah GitHub ini , dan postingan Komunitas Pengembang VS ini tampaknya ada bug di Microsoft.CodeDom.Providers.DotNetCompilerPlatform yang lebih lama paket NuGet yang .

Setelah memutakhirkan paket NuGet ini ke 3.6.0, kesalahan masih berlanjut di aplikasi web saya.

Larutan

Saya menemukan bahwa saya harus menghapus folder lama "bin \ Roslyn" di Aplikasi Web saya untuk membuat ini berfungsi.

Tampaknya paket Microsoft.CodeDom.Providers.DotNetCompilerPlatform NuGet yang lebih baru (3.6.0 dalam kasus saya) tidak lagi membawa folder "Rosyln" sendiri, dan jika ada, folder "Roslyn" yang lama itu diutamakan selama kompilasi.

Uwe Keim
sumber
0

Ini terjadi pada saya ketika saya menarik repo saya setelah memindahkannya ke lokasi baru. Solusinya adalah membongkar dan kemudian memuat ulang setiap proyek yang menunjukkan kesalahan ini.

Saya mencoba beberapa opsi lain tetapi tidak ada yang berhasil untuk saya. Juga dalam situasi ini file konfigurasi saya diatur untuk menggunakan versi bahasa 6, jadi mengaturnya ke default tidak memperbaiki masalah.

Brendan Sluke
sumber
0

Jika di atas semua opsi tidak berfungsi dan Anda telah menggunakan paket nuget seperti Microsoft.Net.Compilers dan CodeDom dan masih tidak berfungsi maka ada masalah dengan file proyek Anda buka file proyek. File proyek menggunakan salah satu opsi kompilator yang tidak mendukung bahasa yang Anda pilih. Buka file proyek dengan notepad ++ dan hapus baris berikut.

File Proyek Orignal

<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props" Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props')" />
  <!--Don't delete below one-->
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />

Hapus baris berikut

  <Import Project="..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props" Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props')" />
Ali
sumber