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.
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.
Câu trả lời:
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=\"Web\" /optionInfer+">
<providerOption name="CompilerVersion" value="v4.0"/>
</compiler>
</compilers>
</system.codedom>
Thay đổi langversion:6
về phía dưới cùng từ 6 thành 5 -langversion:5
Đã sửa nó cho tôi. Cám ơn anh ta.
Nếu bạn muốn sử dụng C # 6.0:
.config
tệp của bạn để thực hiện các sửa đổi sau.Tìm kiếm system.codedom
và 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=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
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à:
đ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.
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!
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
trong trường hợp của tôi (tạo dự án trong một hệ thống khác):
Tôi có thể chạy dự án này.
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
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=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
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)
Tôi đã cập nhật Microsoft.Net.Compilers lên phiên bản 2.0 hoặc cao hơn
Tôi chỉ thay đổi langversion
thành default
và 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=\"Web\" /optionInfer+”>
<providerOption name=”CompilerVersion” value=”v4.0″/>
</compiler>
</compilers>
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.
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.
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 đề GitHub và bà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.
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.
Đ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ố.
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')" />