Включение С# 7 в приложении asp.net

Я только начал работать над своим старым решением в Visual Studio 2017. Просто открыть решение в старой IDE работало без проблем. Приложение С# теперь работает по умолчанию с компилятором С# 7.0. Страницы свойств этого проекта (компиляция/продвинутый) позволяют легко выбрать целевую языковую версию компилятора, по умолчанию последнюю.

Я не могу найти способ включить С# 7.0 в веб-проектах asp.net. Если я напишу выражение, например:

if (int.TryParse("1", out int myInt)) { ... }

IDE предупреждает меня, говоря, что мне нужно использовать версию языка 7+.

Мои исследования по этой теме показывают, что я должен ориентироваться на конкретную версию С# в области компиляторов system.codedom файла web.config, чтобы нацеливаться на новейшую версию Roslyn.

Что у меня сейчас есть:

  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>

какие цели для С# 6. Каковы правильные настройки для С# 7, при условии, что я уже загрузил последнюю версию Roslyn с nuget?

Обновление Вот скриншот доступных опций компиляции для веб-проекта (это итальянский VS2017, но это должно быть легко понять). Там нет возможности выбрать целевую версию С# там.

Compile options

Ответ 1

В окне веб-сайта NuGet:

  • Удалить Microsoft.CodeDom.Providers.DotNetCompilerPlatform
  • Переустановите его
  • В web.config, под: system.codedom > compilers > compiler, change compilerOptions= "/langversion: от 6 до 7

Ответ 2

Я могу скомпилировать его с настройками языка по умолчанию, но не с опцией С# 7. enter image description here

Но настройки ниже дают ошибку времени компиляции:

enter image description here

так что вы можете оставить настройку языковой версии по умолчанию.

Если вы экспериментируете с Roslyn и не используете сборку компилятора по умолчанию для Visual 2017, возможно, вам придется внести некоторые изменения

Выберите название своего проекта и щелкните правой кнопкой мыши >> Окно свойств >> Построить, а затем добавьте два следующих параметра в текстовое поле "Условные символы компиляции" __DEMO__,__DEMO_EXPERIMENTAL__

enter image description here

Обновить

Чтобы использовать С# 7.0, вам нужно использовать 2. 0+ версию Microsoft.Net.Compilers

enter image description here

после установки последней версии Microsoft.Net.Compilers(2. 0+) вы можете выбрать языковую версию С# 7.

поэтому лучшим решением является установка последней версии Microsoft.Net.Compilers(2. 0+).

Ответ 3

Если вы попытаетесь установить Microsoft.CodeDom.Providers.DotNetCompilerPlatform версии 2.0.0 и ваш проект нацелен на версию.net старше 4.6, он автоматически будет использовать более старую версию roslyn, которая поддерживает только версию langversion 6. Это происходит потому, что более новые версии roslyn, включая первую версию, поддерживающую csharp-7, требуют как минимум.net-4.6 для запуска. Если ваш проект нацелен на более старую версию.net, вы получите сообщение об ошибке:

CS1617 Неверный параметр 'последний' для /langversion; должно быть ISO-1, ISO-2, По умолчанию или целое число в диапазоне от 1 до 6.

  1. Убедитесь, что ваш проект ориентирован как минимум на.net-4.6. При необходимости перенастроить.
  2. Если ваш проект по-прежнему использует packages.config, то вы должны удалить и переустановить Microsoft.CodeDom.Providers.DotNetCompilerPlatform чтобы обновить файл проекта, чтобы он указывал на вариант.net-4.6 пакета nuget. Если вы используете <PackageReference/>, у вас все настроено (но вы должны вручную настроить раздел web.config system.codedom).

Ответ 4

Для поддержки С# 7.x установите версию проекта на языке конфигурации сборки на С# последняя дополнительная версия (последняя)

Версия языка конфигурации сборки

Если вы используете провайдеры CodeDOM для платформы компилятора.NET("Roslyn") (например, пакет nuget Microsoft.CodeDom.Providers.DotNetCompilerPlatform), установите compilerOptions = "/langversion: latest" в web.config для asp.net.

<system.codedom>
   <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:latest /nowarn:1659;1699;1701"/>
   </compilers>
</system.codedom>

Для получения дополнительной информации:

Ответ 5

Я ссылался на пользовательский проект A, который ссылался на другой пользовательский проект B. Я просто прочитал ссылки от А до Б, и, похоже, это работает (пока).