Функція "використання декларацій" недоступна в C # 7.3. Будь ласка, використовуйте мову версії 8.0 або новішої - помилка на одній машині, але працює на іншій


24

При використанні Visual Studio Enterprise 16.3.7на двох окремих машинах одна створює штраф, а інша машина видає помилку:

Функція "використання декларацій" недоступна в C # 7.3. Будь ласка, використовуйте мову версії 8.0 або новішої.

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

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

Це може бути легко вирішена на робочій машині жоден, встановивши LangVersionв .csprojякості пропонованих тут https://stackoverflow.com/a/48085575/3850405 або нехай Visual Studio автоматично виправити це як екран друку вище.

<LangVersion>8.0</LangVersion>

Що я не можу зрозуміти, це чому одна машина добре працює без цього рядка, .csprojа інша потрібна?


Якщо ви отримаєте таку помилку, це означає, що це не проект C № 8, або ви використовуєте версію Resharper з помилкою аналізу
Panagiotis Kanavos

Що таке TargetFramework та LangVersion у вашому csproj?
Панайотис Канавос

@PanagiotisKanavos Так, але проект будується на одній машині, а не на іншій - це я не розумію. ReSharper не використовується.
Огглас

Це може означати, що 3.0 SDK відсутній на одній машині. Що dotnet --list-sdksпоказує?
Панайотис Канавос

@PanagiotisKanavos Цільова структура .NET Framework 4.6.1і LangVersionне встановлена.
Огглас

Відповіді:


20

Я отримав таку ж помилку, але просто забув включити цю

<LangVersion>8.0</LangVersion>

атрибут у ВСІХ .csproj файлах у рішенні. Нижче наведено моє поточне налаштування c # 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


2
Ви можете використовувати <LangVersion>latest</LangVersion>замість<LangVersion>8.0</LangVersion>
Eliahu Aaron

Я думаю, що перше посилання MSDN 2.2 -> 3.0має на увазі посилання на таке: docs.microsoft.com/en-us/aspnet/core/migration/22-to-30 Я спробував редагувати відповідь, щоб змінити її, але "запропоновано редагувати чергу заповнено ", тому опублікуємо тут замість цього.
ahillier88


10

Це може бути тому, що компілятор використовує за замовчуванням різні версії мови 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 або більш ранньої версії .NET Core SDK, орієнтуються на 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 #, ви можете зробити це кількома способами:

  • Відредагуйте файл проекту вручну.
  • Встановіть мовну версію для декількох проектів у підкаталозі.
  • Налаштуйте параметр компілятора -лангверсії.

Відредагуйте файл проекту

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

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

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

Налаштування декількох проектів

Для налаштування декількох проектів можна створити файл Directory.Build.props, який містить <LangVersion>елемент. Ви зазвичай робите це у своєму каталозі рішень. Додайте до файлу Directory.Build.props у своєму каталозі рішення:

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

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


8

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

Це також перезапустило мій комп'ютер, і помилка зникла.


Це не номер версії VS2019, вони виглядають як 16.xy Використання довідки> Про.
Ганс Пасант

4.7.03056 - це версія .NET Framework, остання версія VS наразі 16.4.4
Алекс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.