Các tính năng C # 6.0 không hoạt động với Visual Studio 2015


134

Tôi đang thử nghiệm Visual Studio 2015 với C # 6.0 nhưng các tính năng ngôn ngữ không hoạt động. Trong một ứng dụng web MVC, đoạn mã sau sẽ biên dịch:

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

Tuy nhiên, khi tôi chạy ứng dụng qua Debug và IIS Express, tôi gặp lỗi sau:

CS1525: Thuật ngữ biểu thức không hợp lệ '.'

Làm cách nào để bật các tính năng này?


1
Điều này nghe có vẻ như là dành riêng cho MVC (hoặc ít nhất là dành riêng cho ASP.NET) vì vậy tôi đã thêm một thẻ - vì Visual Studio biết rõ về C # 6 ... bạn nên xem xét bất cứ nơi nào bạn định cấu hình MVC theo phiên bản .NET đang nhắm mục tiêu ... có thể có thứ gì đó cho phép bạn chỉ định trình biên dịch sẽ sử dụng.
Jon Skeet

Có lẽ bạn cần thêm một compileryếu tố cho bộ mã hóa roslyn msdn.microsoft.com/en-us/l Library / y9x69bzw (v = vs.110) .aspx trong web.config?
rene

Đây có phải là mã trong một trang aspx hoặc trang Dao cạo không? hoặc mã trong tệp .cs?
Erik Funkenbusch

@ErikFunkenbusch Đó là trong một trang Dao cạo.
Chris Schiffhauer

1
Vâng, MVC5 không tương thích với Roslyn
Erik Funkenbusch

Câu trả lời:


208

Điều này hoạt động trong MVC 5 (đã thử nghiệm 5.2.3), bạn chỉ cần thêm gói roslyn code dom Nuget

Nhà cung cấp CodeDOM cho Trình biên dịch .NET ...

Các nhà cung cấp CodeDOM thay thế sử dụng trình biên dịch .NET Compiler Platform ("Roslyn") mới làm API dịch vụ. Điều này cung cấp hỗ trợ cho các tính năng ngôn ngữ mới trong các hệ thống sử dụng CodeDOM (ví dụ: biên dịch thời gian chạy ASP.NET) cũng như cải thiện hiệu suất biên dịch của các hệ thống này.

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

https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPl platform /


4
Điều này nên được gửi như một câu trả lời, bởi vì nó khắc phục vấn đề thay vì phải nâng cấp lên phiên bản beta của MVC.
Daniel Eugen

3
@Deef bạn không chính xác. Các Microsoft.Net.Compilers có liên quan đến Msbuild. các nhà cung cấp CodeDOM có liên quan đến ASP.NET và api khác là rằng biên dịch tại thời gian chạy.
jbtule

1
Uh, đúng vậy. Tôi đã đọc sai / giải thích sai bởi vì đôi khi họ đánh giá lại các gói với tên mới và chỉ thêm chúng làm phụ thuộc.
David De Sloovere

21
Có thể đáng để đề cập đến để khởi động lại Visual Studio. Nó tiếp tục phàn nàn sau khi tôi cài đặt gói, nhưng việc khởi động lại khiến nó biến mất :)
Người viết

1
@Rono, hãy chắc chắn rằng nguồn gói của bạn là nuget.org. Như bạn có thể thấy từ liên kết, đó là tên chính xác và gói tồn tại.
jbtule

17

Vâng, tôi có MVC5 và gần đây đã cài đặt VS 2015.

Tôi đã cài đặt gói nhà cung cấp CodeDOM, nhưng nó không giúp được gì ... Nhưng sau đó tôi nhận ra, gói đó chỉ hỗ trợ khung 4.5, trong khi tôi có khung mục tiêu được đặt thành 4.6 trong các thử nghiệm - mặc dù nó hoạt động với 4.5 ...

Vì vậy, hãy chú ý đến khung mục tiêu. Nếu bạn có 4.5 - chỉ cần cài đặt gói Microsoft.CodeDom.Providers.DotNetCompilerPl platform. Nhưng nếu bạn có 4.5.1-4.6 làm mục tiêu, bạn sẽ phải thay đổi trong phần 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>

Đối với C # , chỉ cần thay đổi loại thành:

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

Điều này chắc chắn đã giúp tôi C# 6làm việc với ASP.NET 4.6, nhưng có lẽ tốt hơn là đăng mã với chính xác typeđã có ở đó ...
Serj Sagan

Cảm ơn, điều này đã hoạt động khi tôi về nhà vào thứ ba và sau đó không hoạt động khi tôi trở lại vào thứ năm. Bằng cách nào đó, phần cấu hình này đã biến mất AWOL, vì tôi nhớ đã thấy nó khi tôi bắt đầu hoạt động!
Carl

16

Tôi đã gặp vấn đề tương tự trong Visual Studio 2015. Một câu trả lời khác ở đây ám chỉ đến giải pháp tôi đã sử dụng, nhưng họ đã chỉ định không chính xác cách khắc phục và không bao giờ làm rõ.

Trên menu Visual Studio, chọn Project và bạn sẽ thấy mục phụ Kích hoạt C # 6 / VB 14 nếu bạn gặp vấn đề này. Chọn mục phụ menu này. Nó sẽ tải xuống các gói chính xác từ Nuget và cài đặt chúng. Sau đó, khởi động lại Visual Studio và tải lại giải pháp của bạn.

Tôi không thể xác minh nếu điều này cũng sẽ sửa lựa chọn Project Properties> Build> Advanced> Phiên bản ngôn ngữ thành C # 6 , vì vậy bạn cũng có thể muốn kiểm tra điều này sau khi bật C # 6 từ menu.


2
Mục con này không có trong menu Project của tôi. Tôi có Unity 5.5.2 đã mở Cộng đồng VS 2015 của mình để tạo một số tập lệnh. Khi thêm một mặc định vào một thuộc tính, một lỗi trình biên dịch được hiển thị bởi unline màu đỏ, cho biết tôi cần c # 6 vì C # v.4 hiện đang được tải. Bất cứ khi nào tôi cố gắng chọn các thuộc tính của dự án, màn hình chỉ nhấp nháy nhưng không có trang nào xuất hiện.
Edward

15

Kiểm tra các thuộc tính dự án của bạn, đi đến bản dựng, nâng cao và xem C # 6.0 nếu bạn không có nó làm mặc định.

Hiện tại có hỗ trợ hoàn hảo cho MVC5 và C # 6.0 và hoạt động rất tốt!


18
"Tính năng 'toán tử lan truyền null' không khả dụng trong C # 5. Vui lòng sử dụng ngôn ngữ phiên bản 6 trở lên." không biết về cài đặt Nâng cao nhưng dường như không hoạt động ở đây.
juFo

3
Làm thế nào để bạn thay đổi phiên bản mặc định thành 6 để tôi không phải đặt nó trên mỗi dự án?
Mir

3
định nghĩa "một số". điều này không hoạt động trong bản cập nhật so với năm 2015 3.
Robert Ivanc

1
Khi tôi có thuộc tính dự án, tôi không nhận được menu xây dựng. Nếu tôi đi đến "Trang thuộc tính", tôi sẽ nhận được menu xây dựng, nhưng tôi không có nút "nâng cao" trên màn hình xây dựng. Dịch, "Điều này không hoạt động" (đối với tôi)
Malcolm Anderson

Phiên bản VS của tôi là Community 2015 Update 3 (14.0.25431.01)
Malcolm Anderson

10

Bao gồm làm theo lời khuyên về việc cài đặt mới nhất, Microsoft.CodeDom.Providers.DotNetCompilerPlatformtôi cũng phải đặt gốc của mình Web.config system.codedomthành cái này để cuối cùng nhận được tất cả các lỗi trong 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>

Bây giờ khởi động lại Visual Studiovà điều đó nên làm điều đó.


6

Visual Studio 2015 cũng sẽ hiển thị Enable C#6 / VB 14trong menu Project với ứng dụng web / trang web ASP.NET được chọn.

Điều này sẽ thực sự cài đặt Microsoft.CodeDom.Providers.DotNetCompilerPlatformMicrosoft.Net.Compilersgói vào dự án của bạn và thêm các thẻ thích hợp vào tệp web.config.

phòng thu trực quan 2015 - cho phép cs6 snipp


1
tab trang web nào? nếu bạn có nghĩa là tài sản / web thì không có tính năng đó.
Robert Ivanc

1
Tôi Visual Studio, khi bạn chọn một số dự án WebSite, tab Trang web xuất hiện bên cạnh tab Xem. Ở đó bạn có thể tìm thấy tính năng này.
Michal uvada

1
Bây giờ tôi đã hạ cấp, vui lòng chỉnh sửa để làm rõ ý nghĩa chính xác của bạn, ví dụ: bằng cách thêm ảnh chụp màn hình.
user247702

Tôi đang cố gắng khắc phục sự cố với Trang web và mục menu đó không có sẵn cho tôi. Lưu ý rằng các dự án phi Web khác trong cùng một giải pháp không có vấn đề gì khi sử dụng các tính năng VB 14. Tất cả đều nhắm mục tiêu .NET 4.7 và tôi đã cài đặt trình biên dịch 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+" />
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.