Функции С# 6.0, не работающие с Visual Studio 2015

Я тестирую Visual Studio 2015 с С# 6.0, но функции языка не работают. В веб-приложении MVC следующий код компилируется:

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

Однако, когда я запускаю приложение через Debug и IIS Express, я получаю следующую ошибку:

CS1525: недопустимый термин выражения '.'

Как включить эти функции?

Ответ 1

Это работает в MVC 5 (проверено 5.2.3), вам просто нужно добавить код roslyn dom Nuget

Поставщики CodeDOM для .NET Compiler...

Сменные поставщики CodeDOM, которые используют новый компилятор .NET Compiler Platform ( "Roslyn" ) в качестве сервисных API. Это обеспечивает поддержку новых языковых функций в системах с использованием CodeDOM (например, компиляции в ASP.NET), а также улучшает производительность компиляции этих систем.

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

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

Ответ 2

Ну, у меня MVC5 и недавно установлен VS 2015.

Я установил пакет провайдеров CodeDOM, но это не помогло... Но после этого я понял, что пакет поддерживает только фрейм 4.5, в то время как у меня целевая структура установлена ​​на 4.6 во время тестов - она ​​работает с 4.5, хотя...

Поэтому обратите внимание также на целевую структуру. Если у вас есть 4.5 - просто установите пакет Microsoft.CodeDom.Providers.DotNetCompilerPlatform. Но если у вас есть 4.5.1-4.6 в качестве цели, вам придется изменить раздел 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>

Для С# просто измените тип на:

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

Ответ 3

Проверьте свойства проекта, перейдите к сборке, расширенному и посмотрите, есть ли С# 6.0, если у вас нет его по умолчанию.

В настоящее время существует отличная поддержка MVC5 и С# 6.0 и работает удивительно хорошо!

Ответ 4

У меня была такая же проблема в Visual Studio 2015. Другой ответ здесь касался решения, которое я использовал, но они неправильно указали исправление и никогда не давали разъяснений.

В меню Visual Studio выберите Проект, и если вы столкнулись с этой проблемой, вы должны увидеть подпункт Включить С# 6/VB 14. Выберите этот подпункт меню. Он загрузит правильные пакеты от Nuget и установит их. После этого перезапустите Visual Studio и перезагрузите решение.

Я не могу проверить, будет ли это также исправлено Project Properties > Build > Advanced > Language Version для С# 6, поэтому вы можете проверить это, а также после включение С# 6 в меню.

Ответ 5

В том числе, следуя советам по установке последнего Microsoft.CodeDom.Providers.DotNetCompilerPlatform, мне также пришлось установить для этого root Web.config system.codedom, чтобы, наконец, убрать все ошибки в 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>

Теперь перезапустите Visual Studio, и он должен это сделать.

Ответ 6

Visual Studio 2015 также покажет Enable C#6 / VB 14 в меню "Проект" с выбранным веб-сайтом/веб-приложением ASP.NET.

Это де-факто устанавливает пакеты Microsoft.CodeDom.Providers.DotNetCompilerPlatform и Microsoft.Net.Compilers в ваш проект и добавляет соответствующие теги в файл web.config.

visual studio 2015 - включить cs6 snipp

Ответ 7

<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+" />