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


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

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

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

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

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

7 127

7 ответов:

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

поставщики CodeDOM для компилятора .NET...

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

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

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

Ну, у меня есть MVC5 и недавно установлен против 2015 года.

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

Так что обратите внимание также на целевой фреймворк. Если у вас есть 4.5 - просто установите пакет Microsoft.граф CodeDOM.Услуги поставщиков.DotNetCompilerPlatform. Но если у вас есть 4.5.1-4.6 в качестве мишени, вы будете иметь изменения в web.раздел конфигурации

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

на C#, просто измените тип to:

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

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

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

Я не могу проверить, будет ли это также исправить Свойства Проекта > Сборка > Дополнительно > Языковая Версия выбор C# 6, так что вы можете проверить это, а также после включения C# 6 из меню.

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

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

в том числе следуя совету установки последней Microsoft.CodeDom.Providers.DotNetCompilerPlatform Я также должен был установить мой rootWeb.configsystem.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 и это должно сделать это.

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

это будет де-факто установить Microsoft.CodeDom.Providers.DotNetCompilerPlatform и Microsoft.Net.Compilers пакеты в свой проект и добавить соответствующие теги в интернете.конфигурационный файл.

visual studio 2015 - enable cs6 snipp

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