Terus mendapatkan kesalahan itu saat menjalankan aplikasi ASP.NET MVC baru (langsung dari Komunitas VS 2015) di mesin Windows 2008 Server.
c#
asp.net
asp.net-mvc
iis
Kyle Carlson
sumber
sumber
Jawaban:
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=\"Web\" /optionInfer+"> <providerOption name="CompilerVersion" value="v4.0"/> </compiler> </compilers> </system.codedom>
Ubah ke
langversion:6
arah bawah dari 6 menjadi 5 -langversion:5
Memperbaiki itu untuk saya. Berterimakasihlah padanya.
sumber
Jika Anda ingin menggunakan C # 6.0:
.config
file Anda untuk melakukan modifikasi berikut.Cari
system.codedom
dan 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=\"Web\" /optionInfer+" /> </compilers> </system.codedom>
sumber
Saya menemukan bahwa penyebab langsung kesalahan dalam kasus saya adalah:
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 #.
sumber
Dalam kasus saya, kesalahannya adalah:
Saya membuka file .csproj saya dengan notepad dan saya melihat baris ini:
Saya mengubah terbaru untuk bilangan bulat dalam rentang 1 hingga 6
<LangVersion>6</LangVersion>
Kesalahannya hilang!
sumber
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
sumber
dalam kasus saya (buat proyek di sistem lain):
Saya dapat menjalankan proyek ini.
sumber
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
sumber
Tingkatkan paket Microsoft.Net.Compilers Nuget ke versi terbaru (minimal 2.x)
sumber
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=\"Web\" /optionInfer+" /> </compilers> </system.codedom>
sumber
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
sumber
Saya telah memperbarui Microsoft.Net.Compilers ke versi 2.0 atau lebih tinggi
Lihat ini
sumber
Saya baru saja mengubah
langversion
menjadidefault
dan 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=\"Web\" /optionInfer+”> <providerOption name=”CompilerVersion” value=”v4.0″/> </compiler> </compilers>
sumber
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.
sumber
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.
sumber
Dalam kasus saya, pesan kesalahannya adalah:
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.
sumber
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.
sumber
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')" />
sumber