Funzionalità di C # 6.0 che non funzionano con Visual Studio 2015


135

Sto testando Visual Studio 2015 con C # 6.0 ma le funzionalità del linguaggio non funzionano. In un'applicazione Web MVC, viene compilato il seguente codice:

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

Tuttavia, quando eseguo l'applicazione tramite Debug e IIS Express, viene visualizzato il seguente errore:

CS1525: Termine di espressione non valido '.'

Come abilito queste funzionalità?


1
Sembra che sia specifico di MVC (o almeno specifico di ASP.NET), quindi ho aggiunto un tag - poiché Visual Studio stesso conosce chiaramente C # 6 ... dovresti guardare ovunque configuri MVC in termini di versione di .NET è il targeting ... è possibile che ci sia qualcosa che ti permetterà di specificare il compilatore da usare.
Jon Skeet,

Forse avete bisogno di aggiungere un compilerelemento per la Roslyn codeprovider msdn.microsoft.com/en-us/library/y9x69bzw(v=vs.110).aspx nel web.config?
rene,

Questo codice si trova in una pagina aspx o in una pagina Razor? o codice contenuto in un file .cs?
Erik Funkenbusch,

@ErikFunkenbusch È nella pagina di un rasoio.
Chris Schiffhauer,

1
Sì, MVC5 non è compatibile con Roslyn
Erik Funkenbusch,

Risposte:


209

Funziona con MVC 5 (testato 5.2.3), devi solo aggiungere il pacchetto Nuget di dom roslyn code

Provider CodeDOM per il compilatore .NET ...

Provider sostitutivi CodeDOM che utilizzano il nuovo compilatore .NET Compiler Platform ("Roslyn") come API di servizio. Ciò fornisce supporto per le nuove funzionalità del linguaggio nei sistemi che utilizzano CodeDOM (ad es. Compilazione di runtime ASP.NET) e migliora le prestazioni di compilazione di questi sistemi.

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

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


4
Questo dovrebbe essere inviato come una risposta, perché risolve il problema piuttosto che dover eseguire l'aggiornamento a una versione beta di MVC.
Daniel Eugen,

3
@Deef non sei corretto. I Microsoft.Net.Compilers è legato alla MSBuild. i provider CodeDOM sono correlati ad ASP.NET e ad altre API compilate in fase di esecuzione.
jbtule,

1
Si hai ragione. Ho letto male / interpretato male perché a volte riqualificano i pacchetti con nuovi nomi e li aggiungono semplicemente come dipendenze.
David De Sloovere,

21
Vale la pena ricordare di riavviare Visual Studio. Continuava a lamentarsi dopo aver installato il pacchetto, ma un riavvio lo ha fatto sparire :)
Siewers

1
@Rono, assicurarsi che l'origine del pacchetto sia nuget.org. Come puoi vedere dal link, è il nome corretto e il pacchetto esiste.
jbtule,

17

Bene, ho MVC5 e recentemente installato VS 2015.

Ho installato il pacchetto di provider CodeDOM, ma non ha aiutato ... Ma dopo che ho capito, quel pacchetto supporta solo il framework 4.5, mentre il framework di destinazione è impostato su 4.6 durante i test - funziona con 4.5 però ...

Quindi presta attenzione anche al framework target. Se ne hai 4.5, installa il pacchetto Microsoft.CodeDom.Providers.DotNetCompilerPlatform. Ma se hai 4.5.1-4.6 come target, dovrai cambiare nella sezione 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>

Per C # , basta cambiare il tipo in:

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

Questo sicuramente mi ha aiutato C# 6a lavorare con ASP.NET 4.6, ma sarebbe stato meglio pubblicare il codice con il corretto typegià lì ...
Serj Sagan

Grazie, questo aveva funzionato quando sono tornato a casa un martedì e poi non ha funzionato quando sono tornato il giovedì. In qualche modo, questa sezione della configurazione era diventata FANTASTICA, perché ricordo di averlo visto quando lo stavo facendo funzionare originariamente!
Carl

16

Stavo riscontrando lo stesso problema in Visual Studio 2015. Un'altra risposta qui allude alla soluzione che ho usato, ma hanno erroneamente specificato la correzione e non hanno mai dato chiarimenti.

Dal menu Visual Studio, selezionare Progetto e si dovrebbe vedere la voce secondaria Abilita C # 6 / VB 14 se si riscontra questo problema. Seleziona questa voce secondaria del menu. Scaricherà i pacchetti corretti da Nuget e li installerà. Successivamente, riavvia Visual Studio e ricarica la soluzione.

Non riesco a verificare se questo risolverà anche la selezione Proprietà progetto> Genera> Avanzate> Versione lingua su C # 6 , quindi potresti voler controllare anche questo dopo aver abilitato C # 6 dal menu.


2
Questa voce secondaria non si trova nel menu Progetto. Ho Unity 5.5.2 che ha aperto la mia community VS 2015 per creare alcuni script. Quando si aggiunge un valore predefinito a una proprietà, viene visualizzato un errore del compilatore visualizzato dalla riga rossa, che indica che avevo bisogno di c # 6 poiché C # v.4 era attualmente caricato. Ogni volta che provo a selezionare le proprietà del progetto, lo schermo lampeggia ma non viene visualizzata alcuna pagina.
Edward

15

Controlla le proprietà del tuo progetto, vai a compilare, avanzato e vedere se C # 6.0 se non lo hai come predefinito.

Attualmente c'è un supporto perfetto per MVC5 e C # 6.0 e funziona incredibilmente bene!


18
"La funzione" operatore di propagazione null "non è disponibile in C # 5. Utilizzare la lingua versione 6 o successiva." non conoscevo l'impostazione Avanzata ma non sembra funzionare qui.
juFo

3
Come si modifica la versione predefinita in 6 in modo che non sia necessario impostarla su ciascun progetto?
Mir

3
definire "alcuni". questo non funziona nell'aggiornamento 3. vs 2015 2015
Robert Ivanc

1
Quando riesco a progettare le proprietà, non ottengo un menu di creazione. Se vado a "Pagine delle proprietà" ottengo un menu di creazione, ma non ho un pulsante "avanzato" nella schermata di creazione. Traduzione, "Questo non funziona" (per me)
Malcolm Anderson,

La mia versione VS è Community 2015 Update 3 (14.0.25431.01)
Malcolm Anderson

10

Includendo anche il consiglio di installare l'ultima versione, Microsoft.CodeDom.Providers.DotNetCompilerPlatformho dovuto impostare il mio root Web.config system.codedom su questo per ottenere finalmente la Visual Studio 2015scomparsa di tutti gli errori :

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

Ora riavvia Visual Studioe dovrebbe farlo.


6

Visual Studio 2015 mostrerà anche Enable C#6 / VB 14nel menu Progetto con un sito Web / un'applicazione Web ASP.NET selezionato.

Ciò installerà di fatto Microsoft.CodeDom.Providers.DotNetCompilerPlatforme Microsoft.Net.Compilerspacchetti nel tuo progetto e aggiungerà i tag appropriati nel file web.config.

visual studio 2015 - abilita cs6 snipp


1
quale scheda del sito Web? se intendi proprietà / web non esiste tale funzione.
Robert Ivanc,

1
I Visual Studio, quando si seleziona un progetto WebSite, la scheda Sito Web viene visualizzata accanto alla scheda Visualizza. Lì potresti trovare questa funzione.
Michal Šuvada,

1
Per il momento ho effettuato il downgrade, modifica per chiarire cosa intendi esattamente, ad esempio aggiungendo uno screenshot.
user247702

Sto cercando di risolvere il problema con un sito Web e quella voce di menu non è disponibile per me. Si noti che altri progetti non Web nella stessa soluzione non hanno problemi con le funzionalità VB 14. Sono tutti destinati a .NET 4.7 e ho installato il compilatore 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+" />
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.