Visual Studio 2015 ile Çalışmayan C # 6.0 Özellikleri


135

Visual Studio 2015'i C # 6.0 ile test ediyorum, ancak dil özellikleri çalışmıyor. Bir MVC web uygulamasında aşağıdaki kod derlenir:

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

Ancak, uygulamayı Debug ve IIS Express ile çalıştırdığımda, aşağıdaki hatayı alıyorum:

CS1525: Geçersiz ifade terimi '.'

Bu özellikleri nasıl etkinleştiririm?


1
Bu MVC'ye özgü (veya en azından ASP.NET'e özel) gibi görünüyor, bu yüzden bir etiket ekledim - çünkü Visual Studio'nun kendisi C # 6'yı açıkça biliyor ... MVC'yi sürüm açısından yapılandırdığınız her yere bakmalısınız .NET hedefliyor ... orada kullanmak için derleyici belirtmek sağlayacak bir şey olması mümkündür.
Jon Skeet

Belki web.config dosyasına compilerroslyn codeprovider msdn.microsoft.com/en-us/library/y9x69bzw(v=vs.110).aspx için bir öğe eklemeniz gerekir ?
rene

Bu kod bir aspx sayfasında mı yoksa ustura sayfasında mı? veya bir .cs dosyasındaki kod?
Erik Funkenbusch

@ErikFunkenbusch Bir ustura sayfasında.
Chris Schiffhauer

1
Evet, MVC5 Roslyn uyumlu değil
Erik Funkenbusch

Yanıtlar:


209

Bu MVC 5'te çalışır (5.2.3 test edildi), sadece roslyn kodu dom Nuget paketini eklemeniz gerekiyor

.NET Derleyici için CodeDOM Sağlayıcıları ...

Hizmet API'leri olarak yeni .NET Derleyici Platformu ("Roslyn") derleyicisini kullanan yeni CodeDOM sağlayıcıları. Bu, CodeDOM (örn. ASP.NET çalışma zamanı derlemesi) kullanan sistemlerde yeni dil özellikleri için destek sağlarken, bu sistemlerin derleme performansını da artırır.

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

https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/


4
Bu bir yanıt olarak gönderilmelidir, çünkü MVC'nin beta sürümüne yükseltmek yerine sorunu giderir.
Daniel Eugen

3
@Yanlışsanız. Microsoft.Net.Compilers MsBuild ile ilgilidir. CodeDOM Sağlayıcıları ASP.NET ile ilgilidir ve diğer API zamanında bu derleme var.
jbtule

1
Evet, haklısın. Yanlış okudum / yanlış yorumladım çünkü bazen paketleri yeni isimlerle yeniden dolduruyorlar ve sadece bağımlılık olarak ekliyorlar.
David De Sloovere

21
Visual Studio'yu yeniden başlatmayı belirtmek gerekebilir. Paketi yükledikten sonra şikayet etmeye devam etti, ancak bir yeniden başlatma onu gitti :)
Siewers

1
@Rono, Paket kaynağınızın olduğundan emin olun nuget.org. Bağlantıdan da görebileceğiniz gibi, bu doğru addır ve paket mevcuttur.
jbtule

17

MVC5 var ve son zamanlarda VS 2015'i yükledim.

CodeDOM sağlayıcıları paketini yükledim, ancak yardımcı olmadı ... Ama bundan sonra, test sırasında 4.6'ya ayarlanmış hedef çerçevem ​​olsa da, bu paketin yalnızca 4.5 çerçevesini desteklediğini fark ettim.

Bu nedenle hedef çerçeveye de dikkat edin. 4.5 sürümüne sahipseniz, Microsoft.CodeDom.Providers.DotNetCompilerPlatform paketini kurmanız yeterlidir. Ancak hedef olarak 4.5.1-4.6'ya sahipseniz, web.config bölümünde değiştirmeniz gerekir

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

İçin C # , sadece değişim tipi için:

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

Bu kesinlikle C# 6çalışmaya başlamama yardımcı oldu ASP.NET 4.6, ancak kodu typeorada doğru
olanla

Teşekkürler, bu bir Salı günü eve gittiğimde ve Perşembe günü döndüğümde işe yaramadı. Her nasılsa, bu yapılandırmanın bu bölümü AWOL olmuştu, çünkü orijinal olarak çalışmaya başlarken gördüğümü hatırlıyorum!
Carl

16

Visual Studio 2015'te de aynı sorunu yaşıyordum. Burada kullandığım çözüme başka bir cevap verilmişti, ancak düzeltmeyi yanlış belirttiler ve hiçbir zaman açıklama yapmadılar.

Visual Studio menüsünde Project'i seçin ve bu sorun varsa C # 6 / VB 14'ü Etkinleştir alt öğesini görmelisiniz . Bu menü alt öğesini seçin. Nuget'ten doğru paketleri indirir ve kurar. Bundan sonra, Visual Studio'yu yeniden başlatın ve çözümünüzü yeniden yükleyin.

Bunun Proje Özellikleri> Oluştur> Gelişmiş> Dil Sürümü seçimini C # 6'ya düzeltip düzeltmeyeceğini doğrulayamıyorum, bu yüzden menüden C # 6'yı etkinleştirdikten sonra da bunu kontrol etmek isteyebilirsiniz.


2
Bu alt öğe Proje menümde değil. Bazı komut dosyaları oluşturmak için VS 2015 Topluluğumu açan Unity 5.5.2 var. Bir özelliği varsayılan olarak ekledikten sonra, kırmızı çizgisizliğin gösterdiği bir derleyici hatası, C # v.4 şu anda yüklendiğinden c # 6'ya ihtiyacım olduğunu belirttim. Her zaman ekran sadece yanıp söner ama hiçbir sayfa gelmiyor projenin özelliklerini seçmeye çalışın.
Edward

15

Proje özelliklerinizi kontrol edin, derlemeye gidin, ilerleyin ve varsayılan olarak C # 6.0 olup olmadığına bakın.

Şu anda MVC5 ve C # 6.0 için mükemmel destek var ve inanılmaz iyi çalışıyor!


18
"'Null propagating operator' özelliği C # 5'te mevcut değil. Lütfen 6 veya daha büyük bir dil sürümü kullanın." Gelişmiş ayarı bilmiyordu, ancak burada çalışmıyor gibi görünüyor.
juFo

3
Varsayılan sürümü 6 olarak nasıl değiştirirsiniz, böylece her projede ayarlamam gerekmez mi?
Mir

3
"bazılarını" tanımlar. 2015 vs 3 güncellemesinde çalışmıyor.
Robert Ivanc

1
Proje özelliklerine geldiğimde, bir yapı menüsü almıyorum. "Özellik Sayfaları" na gidersem bir yapı menüsüne sahip olurum, ancak yapı ekranında "gelişmiş" butonum yok. Tercüme, "Bu işe yaramaz" (benim için)
Malcolm Anderson

Benim VS sürümüm Topluluk 2015 Güncelleme 3 (14.0.25431.01)
Malcolm Anderson

10

En son yükleme tavsiyesi aşağıdakiler de dahil olmak Microsoft.CodeDom.Providers.DotNetCompilerPlatformBen de ayarlamak zorunda kök Web.config system.codedom nihayet tüm hataları almak için bu kadar Visual Studio 2015uzağa gitmeye:

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

Şimdi yeniden başlatın Visual Studiove bunu yapmalısınız.


6

Visual Studio 2015, Enable C#6 / VB 14bir ASP.NET web sitesi / web uygulaması seçili olarak Proje menüsünde de gösterir .

Bu, projenize fiili kurulum Microsoft.CodeDom.Providers.DotNetCompilerPlatformve Microsoft.Net.Compilerspaketleri de ekleyecek ve web.config dosyasına uygun etiketleri ekleyecektir.

visual studio 2015 - cs6 snipini etkinleştir


1
hangi web sitesi sekmesi? mülkler / web demek istiyorsanız orada böyle bir özellik yoktur.
Robert Ivanc

1
I Visual Studio, bazı WebSite projeleri seçtiğinizde, Görünüm sekmesinin yanında Web Sitesi sekmesi görünür. Orada bu özelliği bulabilirsiniz.
Michal Šuvada

1
Şimdilik indirdim, tam olarak ne demek istediğinizi netleştirmek için lütfen düzenleyin, örn.
user247702

Bir Web sitesindeki sorunu gidermeye çalışıyorum ve bu menü öğesi benim için mevcut değil. Aynı çözümdeki diğer Web dışı projelerin VB 14 özelliklerini kullanırken sorun olmadığını unutmayın. Hepsi .NET 4.7'yi hedefliyor ve CodeDom derleyicisini yükledim.
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+" />
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.