При использовании Visual Studio Enterprise 16.3.7 на двух разных машинах одна работает нормально, а другая выдает ошибку:

Функция «использование объявлений» недоступна в C # 7.3. Используйте версию 8.0 или выше.

enter image description here

enter image description here

Эту проблему легко решить на неработающем компьютере, установив LangVersion в .csproj, как предлагается здесь https: // stackoverflow.com/a/48085575/3850405 или позвольте Visual Studio автоматически исправить это, как на экране печати выше.

<LangVersion>8.0</LangVersion>

Я не могу понять, почему одна машина работает нормально без этой строки в .csproj, а другая машина нуждается в ней?

94
Ogglas 30 Окт 2019 в 14:14
Если вы получаете такую ​​ошибку, это означает, что это не проект C # 8, или вы используете версию Resharper с ошибкой анализа.
 – 
Panagiotis Kanavos
30 Окт 2019 в 14:16
Что такое TargetFramework и LangVersion в вашем csproj?
 – 
Panagiotis Kanavos
30 Окт 2019 в 14:18
Да, но проект строится на одной машине, а не на другой - вот чего я не понимаю. ReSharper не используется.
 – 
Ogglas
30 Окт 2019 в 14:18
Это может означать, что 3.0 SDK отсутствует на одном компьютере. Что показывает dotnet --list-sdks?
 – 
Panagiotis Kanavos
30 Окт 2019 в 14:19
Целевая структура .NET Framework 4.6.1 и LangVersion не установлена.
 – 
Ogglas
30 Окт 2019 в 14:19

4 ответа

Я получил ту же ошибку, но просто забыл включить

<LangVersion>8.0</LangVersion>

В ВСЕ файлы .csproj в решении. Ниже приведена моя текущая настройка С # 8:

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <LangVersion>8.0</LangVersion>
    <Nullable>enable</Nullable>
    <NullableContextOptions>enable</NullableContextOptions>
  </PropertyGroup>

Я обнаружил, что следующие документы наиболее полезны при переходе с ядра 2.2 на 3.x:

MSDN 2.2 -> 3.0

MSDN 3.0 -> 3.1

20
Yoda 7 Янв 2020 в 14:24
2
Вы можете использовать <LangVersion>latest</LangVersion> вместо <LangVersion>8.0</LangVersion>
 – 
Eliahu Aaron
13 Фев 2020 в 13:20
1
Я думаю, что первая ссылка MSDN 2.2 -> 3.0 предназначена для ссылки на следующее: docs.microsoft.com/en-us/aspnet/core/migration/22-to-30 Я попытался отредактировать ответ, чтобы исправить его, но «предлагаемая очередь редактирования заполнена» , так что вместо этого опубликуйте здесь.
 – 
ahillier88
21 Апр 2020 в 10:26

Пришлось обновить Visual Studio до версии с 16.3.X до 16.4.2. Это устранило проблему, и мне не пришлось добавлять LangVersion.

Кредиты: https://github.com/aspnet/AspNetCore.Docs/issues/16047

17
tamsiv 8 Янв 2020 в 11:01

Это может быть связано с тем, что компилятор по умолчанию использует разные языковые версии C # для разных целевых платформ.

Чтобы переопределить язык C # по умолчанию, добавьте в файл проекта (как предлагается в вопросе):

<PropertyGroup>
   <LangVersion>8.0</LangVersion>
</PropertyGroup>

Или же:

<PropertyGroup>
   <LangVersion>latest</LangVersion>
</PropertyGroup>

См. управление версиями языка C # по умолчанию. Языковые версии C # для различных целевых платформ и способы выбора языковой версии C # вручную.

См. Также ответ о переполнении стека Поддерживает ли C # 8 .NET Framework? для получения дополнительной информации по этой теме.


Это часть управления версиями языка C # статья:

Управление версиями языка C #

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

Правила в этой статье применяются к компилятору, поставляемому с Visual Studio 2019 или .NET Core 3.0 SDK. Компиляторы C #, входящие в состав установки Visual Studio 2017 или более ранних версий SDK .NET Core, по умолчанию нацелены на C # 7.0.

По умолчанию

Компилятор определяет значение по умолчанию на основе этих правил:

--------------------------------------------------------
Target framework | version | C# language version default
--------------------------------------------------------
.NET Core        | 3.x     | C# 8.0
.NET Core        | 2.x     | C# 7.3
.NET Standard    | 2.1     | C# 8.0
.NET Standard    | 2.0     | C# 7.3
.NET Standard    | 1.x     | C# 7.3
.NET Framework   | all     | C# 7.3
--------------------------------------------------------

Заменить значение по умолчанию

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

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

Отредактируйте файл проекта

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

<PropertyGroup>
   <LangVersion>preview</LangVersion>
</PropertyGroup>

Значение preview использует последнюю доступную предварительную версию языка C #, которую поддерживает ваш компилятор.

Настроить несколько проектов

Чтобы настроить несколько проектов, вы можете создать файл Directory.Build.props , содержащий элемент <LangVersion>. Обычно это делается в каталоге решений. Добавьте следующее в файл Directory.Build.props в каталоге решения:

<Project>
 <PropertyGroup>
   <LangVersion>preview</LangVersion>
 </PropertyGroup>
</Project>

Теперь сборки в каждом подкаталоге каталога, содержащего этот файл, будут использовать предварительную версию C #. Дополнительные сведения см. В статье Настроить ваша сборка.

11
Eliahu Aaron 15 Мар 2020 в 12:32

Я загрузил последнюю версию .Net Core 3.0 и 3.1 и столкнулся с той же проблемой. Мне показалось, что исправление загружает последнее обновление для Visual Studio 2019 (до версии 16.4.2).

Это также перезапустило мой компьютер, и ошибка исчезла.

8
Community 12 Фев 2020 в 18:03
Это не номер версии VS2019, они выглядят как 16.x.y. Используйте Help> About.
 – 
Hans Passant
31 Дек 2019 в 20:35
4.7.03056 - это версия .NET Framework, последняя версия VS в настоящее время - 16.4.4.
 – 
Alex
10 Фев 2020 в 15:05