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

135

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

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

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

CS1525: недопустимый термин "."

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

Крис Шиффхауэр
источник
1
Это звучит так, как будто это специфично для MVC (или, по крайней мере, для ASP.NET), поэтому я добавил тег - потому что сама Visual Studio четко знает о C # 6 ... вы должны смотреть везде, где вы конфигурируете MVC с точки зрения версии из .NET он нацелен ... возможно, там есть что-то, что позволит вам указать компилятор для использования.
Джон Скит
Может быть, вам нужно добавить compilerэлемент для roslyn codeprovider msdn.microsoft.com/en-us/library/y9x69bzw(v=vs.110).aspx в web.config?
Рене
Этот код находится на странице aspx или на странице Razor? или код в файле .cs?
Эрик Фанкенбуш
@ErikFunkenbusch Это на странице бритвы.
Крис Шиффхауэр
1
Да, MVC5 не совместим с Roslyn
Эрик Фанкенбуш

Ответы:

209

Это работает в 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/

jbtule
источник
4
Это должно быть представлено как ответ, потому что это устраняет проблему, а не обновляет бета-версию MVC.
Даниэль Евгений
3
@ Если ты ошибаешься. В Microsoft.Net.Compilers связано с MSBuild. что провайдеры CodeDOM связаны с ASP.NET и другие API, которые компиляция во время выполнения.
jbtule
1
Да, ты прав. Я неправильно прочитал / неверно истолковал, потому что они иногда перезаписывают пакеты с новыми именами и просто добавляют их как зависимости.
Дэвид Де Слововер
21
Возможно, стоит упомянуть перезапуск Visual Studio. Он продолжал жаловаться после того, как я установил пакет, но перезапуск заставил его уйти :)
Siewers
1
@ Роно, убедитесь, что ваш источник пакета nuget.org. Как видно из ссылки, это правильное имя, и пакет существует.
jbtule
17

Ну, у меня есть 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>

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

type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
Сергей Клёпов
источник
Это, безусловно, помогло мне начать C# 6работать ASP.NET 4.6, но, возможно, было бы лучше опубликовать код с правильным typeтам уже ...
Серж Саган
Спасибо, это сработало, когда я вернулся домой во вторник, а потом не сработало, когда я вернулся в четверг. Каким-то образом этот раздел конфига вышел из самоволки, потому что я помню, как видел его, когда заставлял его работать изначально!
Карл
16

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

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

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

Том К
источник
2
Этот подпункт отсутствует в меню моего проекта. У меня есть Unity 5.5.2, которая открыла мое сообщество VS 2015 для создания некоторых скриптов. После добавления значения по умолчанию к свойству ошибка компилятора, отображаемая красной линией, указывает, что мне нужен c # 6, так как C # v.4 был загружен в данный момент. Каждый раз, когда я пытаюсь выбрать свойства проекта, экран просто мигает, но страница не появляется.
Эдвард
15

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

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

Барт Каликсто
источник
18
«Функция« Нулевой распространяющий оператор »недоступна в C # 5. Пожалуйста, используйте языковую версию 6 или выше». не знал о настройке Advanced, но, похоже, здесь не работает.
ЮФО
3
Как изменить версию по умолчанию на 6, чтобы мне не приходилось устанавливать ее в каждом проекте?
Мир
3
определить «некоторые». это не работает в обновлении 3 против 2015 года.
Роберт Иванк
1
Когда я попал в свойства проекта, я не получил меню сборки. Если я перехожу на «Страницы свойств», я получаю меню сборки, но у меня нет «расширенной» кнопки на экране сборки. Перевод "Это не работает" (для меня)
Малкольм Андерсон
Моя версия VS - Обновление 3 сообщества 2015 (14.0.25431.01)
Малкольм Андерсон,
10

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

Михал Шувада
источник
1
какая вкладка сайта? если вы имеете в виду свойства / веб, там нет такой возможности.
Роберт Иванк
1
В Visual Studio, когда вы выбираете какой-либо проект WebSite, рядом с вкладкой «Вид» появляется вкладка «Веб-сайт». Там вы можете найти эту функцию.
Михал Шувада
1
Сейчас я проголосовал, пожалуйста, отредактируйте, чтобы уточнить, что именно вы имеете в виду, например, добавив скриншот.
user247702
Я пытаюсь решить проблему с веб-сайтом, и этот пункт меню для меня недоступен. Обратите внимание, что другие не-веб-проекты в том же решении не имеют проблем с использованием функций VB 14. Все они нацелены на .NET 4.7, и я установил компилятор CodeDom.
Андрей С
-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+" />
JEuvin
источник