Функции С# 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=\"Web\" /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=\"Web\" /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=\"Web\" /optionInfer+" />