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 не сумісний з Рослін
Ерік Функенбуш

Відповіді:


209

Це працює в MVC 5 (тестоване 5.2.3), вам просто потрібно додати пакунок з кодом roslyn dom Nuget

Провайдери CodeDOM для .NET Compiler ...

Заміни постачальників CodeDOM, які використовують новий компілятор платформи .NET Compiler ("Roslyn") в якості сервісних API. Це забезпечує підтримку нових мовних функцій у системах, що використовують CodeDOM (наприклад, компіляція під час виконання ASP.NET), а також покращує ефективність компіляції цих систем.

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

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


4
Це слід подати як відповідь, оскільки це вирішує проблему, а не потребує оновлення до бета-версії MVC.
Даніель Еуген

3
@Deef ви неправі. У Microsoft.Net.Compilers пов'язано з MSBuild. що провайдери CodeDOM пов'язані з ASP.NET і інші API, які компіляція під час виконання.
jbtule

1
Так, ти маєш рацію. Я неправильно прочитав / неправильно витлумачив, тому що вони іноді повторюють пакунки з новими іменами і просто додають їх у залежності.
David De Sloovere

21
Можливо, варто згадати про перезапуск Visual Studio. Він продовжував скаржитися після того, як я встановив пакунок, але перезапуск змусив його піти :)
Siewers

1
@Rono, переконайтесь, що джерело вашого пакета 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вже там ...
Serj Sagan

Дякую, це спрацювало, коли я пішов додому у вівторок, а потім не працював, коли повертався у четвер. Якось цей розділ конфігурації пішов AWOL, тому що я пам’ятаю, як бачив його, коли я змусив його працювати спочатку!
Карл

16

У мене була така ж проблема у Visual Studio 2015. Ще одна відповідь тут натякала на використовуване нами рішення, але вони неправильно вказали виправлення і ніколи не давали роз'яснень.

У меню Visual Studio виберіть Проект, і вам слід побачити підпункт Enable C # 6 / VB 14, якщо у вас є ця проблема. Виберіть цей підпункт меню. Він завантажить правильні пакети з Nuget та встановить їх. Після цього перезапустіть Visual Studio і перезавантажте рішення.

Я не можу перевірити, чи це також виправить властивості проекту> Збірка> Додатково> Вибір версії мови на C # 6 , тому ви, можливо, захочете перевірити це також після включення C # 6 у меню.


2
Цей підпункт відсутній у моєму меню проекту. У мене єдність 5.5.2, яка відкрила мою спільноту VS 2015 для створення деяких сценаріїв. Після додавання до властивості властивостей за замовчуванням помилка компілятора, показана червоною лінією, заявила, що мені потрібен c # 6, оскільки C # v.4 наразі завантажений. Коли я намагаюся вибрати властивості проекту, екран просто блимає, але жодна сторінка не з'являється.
Едвард

15

Перевірте властивості свого проекту, перейдіть до створення, вдосконаленого і подивіться, чи немає C # 6.0, якщо у вас його немає за замовчуванням.

На даний момент ідеальна підтримка MVC5 та C # 6.0 і працює надзвичайно добре!


18
"Функція" оператор з нульовим розповсюдженням "недоступна на C # 5. Будь ласка, використовуйте мовну версію 6 або вище." не знав про додаткову настройку, але, схоже, тут не працює.
juFo

3
Як змінити версію за замовчуванням на 6, щоб мені не довелося встановлювати її для кожного проекту?
Мир

3
визначити "деякі". це не працює в оновленнях до 2015 року 3.
Роберт Іванч

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.

візуальна студія 2015 - включити cs6 snipp


1
яка вкладка веб-сайту? якщо ви маєте на увазі властивості / веб, такої функції там немає.
Роберт Іванц

1
I Visual Studio, коли ви вибираєте якийсь проект WebSite, поруч із вкладкою Перегляд відображається вкладка Веб-сайт. Там ви можете знайти цю функцію.
Міхал Шувада

1
Наразі я прийняв рішення, будь ласка, редагуйте, щоб уточнити, що саме ви маєте на увазі, наприклад, додавши скріншот.
user247702

Я намагаюся вирішити проблему з веб-сайтом, і цей пункт меню недоступний для мене. Зауважте, що інші проекти, що не стосуються веб-сторінок, у тому самому рішенні не мають проблем із використанням функцій VB 14. Всі вони націлені на .NET 4.7, і я встановив компілятор 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+" />
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.