CS1617: Tùy chọn '6' cho / langversion không hợp lệ; phải là ISO-1, ISO-2, 3, 4, 5 hoặc Mặc định


91

Vẫn gặp lỗi đó khi chạy ứng dụng ASP.NET MVC mới (trực tiếp từ Cộng đồng VS 2015) trên máy Windows 2008 Server.


3
Hạ cấp phiên bản ngôn ngữ xuống 5. Hãy xem: Cách thay đổi phiên bản Ngôn ngữ
NASSER

Trong trường hợp của tôi, tôi đã nâng cấp System.Web.Mvc.dll từ phiên bản 5.2.3 lên 5.2.7, nó đã khắc phục sự cố này do phiên bản không chính xác.
Dino Liu

Câu trả lời:


104

Rất nhiều người đang chạy vào nó, vì vậy tôi muốn đăng ở đây.

Đã tìm ra một giải pháp dễ dàng điên rồ nhờ anh chàng này: Expertdebugger .

Chỉ cần hạ cấp phiên bản ngôn ngữ của bạn từ C # 6 xuống C # 5, như sau:

<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>

Thay đổi langversion:6về phía dưới cùng từ 6 thành 5 -langversion:5

Đã sửa nó cho tôi. Cám ơn anh ta.


1
Cảm ơn rất nhiều đã giúp tôi.
À.

28
Đó chỉ là yêu cầu trình biên dịch biên dịch với C # phiên bản 5 thay vì 6, đó không phải là điều bạn muốn nếu bạn đang thực hiện một dự án .NET 4.6 ... Những gì bạn thực sự cần thay đổi là loại trình biên dịch, giống như nó hiển thị trên câu trả lời khác cho câu hỏi này!
Nuno Agapito

1
Hoặc xóa chính khối <system.codedom>, nó cũng sẽ khắc phục được sự cố.
Anupam Singh

5
Thay đổi điều này ở đâu? Ý tôi là tôi cần đặt mã này ở đâu?
Không thể phá vỡ

Đặt nó vào tệp web.config hoặc app.config của bạn
csharpforevermore

81

Nếu bạn muốn sử dụng C # 6.0:

  1. Đảm bảo rằng phiên bản .NET của dự án của bạn cao hơn 4.5.2.
  2. Và sau đó kiểm tra .configtệp của bạn để thực hiện các sửa đổi sau.

Tìm kiếm system.codedomvà sửa đổi nó để nó trông như hình dưới đây:

<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>

Đó chính xác là những gì tôi đang tìm kiếm. Tôi bắt đầu gặp lỗi này sau khi nâng cấp dự án ASP.NET MVC từ .NET Framework 4.5.2 lên 4.6. Tôi không chắc lắm, nhưng tôi nghĩ rằng sẽ tốt hơn nếu Visual Studio tự cập nhật những dòng đó.
Zignd

3
Điều này nên được thực hiện câu trả lời đúng như nó thực sự sửa chữa vấn đề này và cho phép trình biên dịch để sử dụng phiên bản mới nhất thay vì rơi trở lại phiên bản cũ
SM3RKY

1
Đồng ý với SM3RKY - câu trả lời này phù hợp hơn vì nó giải quyết được vấn đề, thay vì bỏ qua nó!
Jon Story

Nếu bạn nâng cấp giải pháp của mình lên .net 4.6 cho một dự án hiện có sử dụng VS 2015 Community trở xuống, lỗi này xảy ra. Sau khi cập nhật VS 2015 Update 3, bản sửa lỗi này được cung cấp theo mặc định cho các dự án mới. Tuy nhiên câu trả lời là sửa chữa chính xác!
Mahmut C

Đây khắc phục sự cố cho tôi trong một dự án Net 4.6.2 sử dụng ASP.NET (webforms) và VB.NET
Eric Hewett

14

Tôi thấy rằng nguyên nhân trực tiếp gây ra lỗi trong trường hợp của tôi là:

phiên bản ngôn ngữ xây dựng -> nâng cao ->

điều này có ý nghĩa vì lỗi cho biết rằng có một tùy chọn không hợp lệ cho ngôn ngữ.

nhưng, điều này đã hoạt động tốt trước đây - vì vậy nó phải được chọn. những gì đã thay đổi? Hóa ra một thành viên trong nhóm của tôi đã nâng cấp lên so với năm 2017, trong khi tôi vẫn đang sử dụng năm 2015. Sau khi anh ấy thực hiện thay đổi đối với dự án, phiên bản ngôn ngữ đã được thay đổi và tôi nhận được thay đổi đó đối với quyền kiểm soát nguồn. nhưng phiên bản đã chọn không có sẵn cho phiên bản vs của tôi, vì vậy nó trống - do đó lỗi. sau khi chọn một giá trị trong ngôn ngữ thả xuống (tôi đã chọn mặc định), một lỗi mới xuất hiện. lỗi mới gây ra lỗi xây dựng trên bất kỳ dòng mã nào sử dụng phiên bản mới hơn của c #. Tôi đã thay đổi mã để thực hiện các chức năng tương tự, nhưng với cú pháp phiên bản c # và vấn đề đã được giải quyết.

vì vậy, mặc dù nguyên nhân trực tiếp của lỗi thực sự là lựa chọn Phiên bản Ngôn ngữ không hợp lệ, nhưng nguyên nhân gốc rễ là do các phiên bản so với / c # khác nhau xung đột.


1
Câu trả lời này đã giúp tôi sau khi kiểm tra tất cả những người khác. cảm ơn
MindRoasterMir

1
Câu trả lời này cũng áp dụng cho trường hợp của tôi khi tôi đang cố gắng chạy một dự án được đặt thành C # 8, nhưng nó không được hỗ trợ trong studio trực quan của tôi năm 2017. Chỉ VS 2019
Vinícius Gabriel

13

Trong trường hợp của tôi, lỗi là:

Lỗi CS1617 Tùy chọn không hợp lệ 'mới nhất' cho / langversion; phải là ISO-1, ISO-2, Mặc định hoặc một số nguyên trong phạm vi từ 1 đến 6.

Tôi đã mở tệp .csproj của mình bằng notepad và tôi thấy dòng này:

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

Tôi đã thay đổi số nguyên mới nhất trong phạm vi từ 1 đến 6

<LangVersion>6</LangVersion>

Lỗi đã biến mất!


Cảm ơn rât nhiều! Hiện đang gỡ lỗi trong VS2015 và Unity2018 hoạt động
8Observer

Không cần phải mở chính xác trong notepad nhưng từ chương trình trực quan, người ta có thể tải lên dự án và sau đó chỉnh sửa dự án, điều này cũng sẽ khắc phục sự cố này.
Shantu

12

Trong trường hợp của tôi, tôi đã sử dụng sai MSBuild.exe, một trong những:

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

Để giải quyết lỗi, tôi đã cập nhật biến môi trường PATH của mình để bắt đầu sử dụng Visual Studio 2017 MSBuild.exe:

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

Vui lòng xem liên kết này để biết chi tiết: Lỗi CS1056: Ký tự không mong muốn '$' chạy msbuild trên quá trình tích hợp liên tục tfs


Tương tự ở đây, trong trường hợp của tôi, tôi đã cài đặt Công cụ MSBuild và sử dụng msbuild từ "C: \ Program Files (x86) \ MSBuild \ 14.0 \ Bin \ MSBuild.exe"
falstaff

10

trong trường hợp của tôi (tạo dự án trong một hệ thống khác):

  1. dự án sạch (nhấp chuột phải vào dự án trong trình khám phá giải pháp và nhấp vào mục sạch).
  2. sau đó xây dựng dự án (nhấp chuột phải vào dự án trong trình khám phá giải pháp và nhấp vào mục xây dựng).

Tôi có thể chạy dự án này.


5

Thay vì thay đổi phiên bản ngôn ngữ từ 6 thành 5, hãy thay đổi thuộc tính "type" trên thẻ trình biên dịch từ

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

đến

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

4

Nâng cấp gói Microsoft.Net.Compilers Nuget lên phiên bản mới nhất (ít nhất 2.x)


3

Giải pháp dễ nhất cho tôi là nâng cấp Trình biên dịch .Net qua Trình quản lý gói

Cài đặt gói Microsoft.Net.Compilers

và sau đó thay đổi các dòng Web.Config thành

<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>

1

Hóa ra đây là một vấn đề, vì dự án ASP.NET MVC 4 đang tham chiếu đến một phiên bản cụ thể của gói Microsoft.Net.Compilers. Visual Studio đang sử dụng trình biên dịch từ gói cụ thể này chứ không phải trình biên dịch đã được cài đặt khác trên máy tính.

Một cảnh báo hoặc một cái gì đó sẽ tốt đẹp từ VS2019 :-)

Giải pháp sau đó là cập nhật gói Microsoft.Net.Compilers lên phiên bản mới hơn.

Phiên bản 1.x dành cho C # 6 Phiên bản 2.x dành cho C # 7 Phiên bản 3.x dành cho C # 8 Cách tôi giải quyết vấn đề này không rõ ràng ngay lập tức. Visual Studio có thể đã gợi ý hoặc gợi ý rằng bằng cách tôi chọn một phiên bản mới trong cài đặt dự án mà cài đặt hiện xung đột với gói được cài đặt vào dự án.

(Tôi đã kết thúc việc bật ghi nhật ký MSBuild cấp độ Chẩn đoán để tìm ra CSC.EXE mà IDE đang thực sự cố gắng sử dụng)

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



0

Tôi chỉ thay đổi langversionthành defaultvà nó làm việc cho tôi. 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>


0

Giải pháp sạch và xây dựng lại Trong trường hợp của tôi, bất kỳ cài đặt nào trước đó đều bị chặn do không khớp. Tôi đã nhập một dự án mới và xây dựng nó, thử thay đổi các phiên bản và tất cả. làm sạch các giải pháp và xây dựng phù hợp với tôi.


0

Trong trường hợp của tôi, tôi đang tải xuống một thư viện với mã mẫu triển khai keycloak bằng mattorg từ GITHUB: https://github.com/mattmorg55/Owin.Security.Keycloak/tree/dev/samples

Giải pháp khá dễ dàng, vì tôi đã sử dụng .Net Framework 4.6.1, nhưng ngay từ đầu dự án đã yêu cầu tôi sử dụng 4.6.2. Mặc dù tôi đã tải xuống, nhưng lần đầu tiên nó được chọn chủ động, khi khởi động lại tất cả các phiên bản của Visual Studion (hoặc tốt hơn là đóng tất cả các phiên bản). Dự án đã được điều chỉnh thành 4.6.1 (mặc dù tôi không muốn và đã chọn như vậy).

Vì vậy, sau khi tôi chọn lại cấu hình để chọn .Net Framework 4.6.1, lỗi đã biến mất ngay lập tức.


0

Trong trường hợp của tôi, thông báo lỗi là:

ASPNETCOMPILER: lỗi CS1617: Tùy chọn không hợp lệ '7.3' cho / langversion; phải là ISO-1, ISO-2, Mặc định hoặc một số nguyên trong phạm vi từ 1 đến 6.

Như đã nêu trong vấn đề GitHubbài đăng trên Cộng đồng nhà phát triển VS này , có vẻ như đó là một lỗi trong gói Microsoft.CodeDom.Providers.DotNetCompilerPlatform NuGet cũ hơn .

Sau khi nâng cấp gói NuGet này lên 3.6.0, lỗi vẫn còn trong ứng dụng web của tôi.

Giải pháp

Tôi phát hiện ra rằng tôi phải xóa thư mục "bin \ Roslyn" cũ trong Ứng dụng web của mình để làm cho việc này hoạt động.

Có vẻ như gói Microsoft.CodeDom.Providers.DotNetCompilerPlatform NuGet mới hơn (trong trường hợp của tôi là 3.6.0) không mang thư mục "Rosyln" của riêng nó nữa và nếu có, thư mục "Roslyn" cũ đó sẽ được ưu tiên trong quá trình biên dịch.


0

Điều này đã xảy ra với tôi khi tôi kéo repo của mình xuống sau khi chuyển nó đến một vị trí mới. Giải pháp là dỡ bỏ và sau đó tải lại từng dự án đang hiển thị lỗi này.

Tôi đã thử một vài tùy chọn khác nhưng không có gì hiệu quả với tôi. Cũng trong trường hợp này, các tệp cấu hình của tôi đã được đặt để sử dụng ngôn ngữ chuyển đổi 6, vì vậy việc đặt chúng thành mặc định không khắc phục được sự cố.


0

Nếu trên tất cả các tùy chọn không hoạt động và bạn đã sử dụng các gói nuget như Microsoft.Net.Compilers và CodeDom mà vẫn không hoạt động thì có vấn đề với tệp dự án đang mở tệp dự án của bạn. Tệp dự án đang sử dụng một trong các tùy chọn trình biên dịch không hỗ trợ ngôn ngữ bạn đã chọn. Mở tệp dự án bằng notepad ++ và xóa dòng sau.

Tệp dự án 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')" />

Xóa các dòng sau

  <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')" />
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.