Как заставить редактор представлений Visual Studio и предварительный компилятор использовать C # 7?

У нас есть проблема с Visual Studio 2019, обнаруженная при попытке предварительно скомпилировать наш проект ASP.Net во время публикации. У нас есть такие ошибки, как:

ошибка CS1056: неожиданный символ '$'

Когда я смотрю на представление, оно использует интерполяцию строк.

введите описание изображения здесь

Все проекты в этом решении настроены на использование полной .Net Framework 4.6.1. Из того, что я читал, по умолчанию должен использоваться компилятор C # 7.3.

Я обновил пакеты DomCompiler и Compiler до версии 3.6.0. В web.config я попытался установить версию С # как по умолчанию, так и конкретно 7. Ошибка возникает независимо от того, какой из них используется.

Я также попытался добавить LangVersion в файл .csproj и указать 7, но это тоже не сработало.

Если мы развертываем не предварительно скомпилированные, эти представления работают, поэтому время выполнения на сервере обычно является правильной версией компилятора C #. Это только вопрос времени разработки и времени сборки.


person PilotBob    schedule 27.07.2020    source источник
comment
Ваша проблема находится где-то в .csproj, опубликуйте ее содержимое.   -  person Ian Kemp    schedule 11.08.2020
comment
Может помочь, если вы покажете .csproj, а также раздел компиляторов web.config, а также packages.config. Где-то используется неправильный компилятор, вероятно, тот, который поставляется с .net, а не с Visual Studio.   -  person Andrew    schedule 12.08.2020
comment
И что делает csc -langversion :? показать при запуске из командной строки Visual Studio? Это будет последняя версия языка, используемая Visual Studio, хотя вы можете выбрать более низкие для проекта.   -  person Andrew    schedule 12.08.2020


Ответы (2)


Visual Studio 2019

Visual Studio 2019 по умолчанию выбирает языковую версию:

  1. Щелкните проект правой кнопкой мыши и выберите Свойства.
  2. Выберите Сборка и нажмите кнопку Дополнительно.
  3. щелкните Почему я не могу выбрать другую версию?

введите описание изображения здесь

Последний компилятор C # определяет версию языка по умолчанию на основе целевой платформы или платформ вашего проекта. Visual Studio не предоставляет пользовательский интерфейс для изменения значения, но вы можете изменить его, отредактировав файл csproj. Выбор по умолчанию гарантирует, что вы используете последнюю языковую версию, совместимую с вашей целевой платформой.

Если вы хотите изменить языковую версию, у вас есть 3 варианта:

  1. Вручную отредактируйте свой файл проекта.
  2. Установите языковую версию для несколько проектов в подкаталоге.
  3. Настройте параметр компилятора -langversion.

Первый вариант, кажется, достигает вашей цели, откройте файл проекта в своем любимом текстовом редакторе и добавьте языковую версию, например:

MyProject.csproj

<Project>
    <PropertyGroup>
        <LangVersion>latest</LangVersion>
        <!--<LangVersion>preview</LangVersion>-->
        <!--<LangVersion>7.3</LangVersion>-->
    </PropertyGroup>
</Project>

Visual Studio 2017

  1. Щелкните проект правой кнопкой мыши и выберите Свойства.
  2. Выберите Сборка и нажмите кнопку Дополнительно.
  3. Здесь вы можете выбрать свою языковую версию

введите описание изображения здесь

Измените языковую версию для всех проектов за один раз

Если в вашем решении несколько проектов и вы хотите создать конфигурацию для изменения языковой версии для всех проектов за один раз, вам необходимо создать файл с именем Directory.Build.props в корне вашего репозитория. Вы можете настроить языковую версию в этом файле, например:

Directory.Build.props

<Project>
    <PropertyGroup>
        <LangVersion>latest</LangVersion>
        <!--<LangVersion>preview</LangVersion>-->
        <!--<LangVersion>7.3</LangVersion>-->
    </PropertyGroup>
</Project>

См. этот вопрос для подробного объяснения.

person Hooman Bahreini    schedule 08.08.2020
comment
Вы используете Visual Studio Code? - person Hooman Bahreini; 11.08.2020
comment
Нет. VS 2019 с проектами .Net framework, нацеленными на 4.6.1 атм. - person PilotBob; 11.08.2020
comment
Вот что меня смутило. Версия по умолчанию для .net 4.6.1 должна быть 7.3. Но похоже, что он этим не пользуется. Я обновил DomCompilers до 3.6.0 и в web.config, а не langversion = defualt, я установил его на 7.3. Казалось, это решило проблему. В моем решении должно быть что-то, мешающее автоматическому выбору. - person PilotBob; 12.08.2020

Вы не можете использовать C # 7 с проектами .Net framework, ориентированными на 4.6.1. Неважно, какую версию Visual Studio вы используете.

Проверьте эту ссылку: https://www.tutorialsteacher.com/csharp/csharp-version-history

У меня была такая же проблема (я не мог использовать все языковые функции) при использовании (.net 4.5.2)

person ANSerpen    schedule 11.08.2020