Как включить функцию Nullable Reference Types в C # 8.0 для всего проекта - PullRequest
0 голосов
/ 05 декабря 2018

В соответствии с C # 8 видеообъявлением функция «обнуляемые ссылочные типы» может быть включена для всего проекта.

Но как включить ее для проекта?Я не нашел никакой новой соответствующей опции в окне «Свойства проекта» в Visual Studio 2019 Preview 1. Может ли она быть включена для «устаревших» .csproj проектов, если языковая версия C # изменена на 8.0?

Ответы [ 4 ]

0 голосов
/ 14 июля 2019

Вы спрашивали о устаревшем формате .csproj.Мне удалось скомпилировать приложение .NET WinForms с C # 8 в Visual Studio 2019 (v16.2.0 Preview 3), вручную внеся следующие изменения:

  1. Добавить <LangVersion>preview</LangVersion> (или8.0) в разделах Debug и Release PropertyGroup:

    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
       <LangVersion>preview</LangVersion>
    
  2. Включите поддержку необнуляемых ссылочных типов, добавив <Nullable>enable</Nullable> к основному PropertyGroup:

    <PropertyGroup>
       <Nullable>enable</Nullable>
    

С этой конфигурацией обнуляемые ссылочные типы компилируются без предупреждения или ошибки.

Если я удаляю <Nullable>enable</Nullable>, проект компилируется, но с предупреждением компилятора "CS8632: Аннотацию для ссылочных типов, допускающих обнуляемость, следует использовать только в коде в контексте «#nullable».

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


Проекты в стиле SDK намного проще и могут редактироваться в Visual Studio.Для этого все, что вам нужно, это (в тех же PropertyGroup, что и TargetFramework или TargetFrameworks):

  <PropertyGroup>
    <LangVersion>8.0</LangVersion>
    <Nullable>enable</Nullable>
  </PropertyGroup>

В обоих случаях вы, вероятно, захотите использовать <LangVersion>latest</LangVersion> один раз C #8 вне предварительного просмотра - для получения дополнительной информации см. Управление версиями языка C # в MSDN.

0 голосов
/ 04 февраля 2019

Обратите внимание, что этот параметр изменился между предварительным просмотром 1 и предварительным просмотром 2. VS 2019. В предварительном просмотре 2 или 3 это необходимо в вашем .csproj:

<PropertyGroup>
  <LangVersion>8.0</LangVersion>
  <NullableContextOptions>enable</NullableContextOptions>
</PropertyGroup>

Так что <NullableReferenceTypes>, упомянутый в предыдущем ответе(который, когда я изначально писал этот ответ 4 февраля 2019 г., был помечен как принятый ответ) был верным на момент написания ответа, но он больше не распознается.

0 голосов
/ 23 мая 2019

В Visual Studio 16.2 (из предварительного просмотра 1) имя свойства изменилось на Nullable, что проще и соответствует аргументу командной строки.

<PropertyGroup>
  ...
  <Nullable>enable</Nullable>
  <LangVersion>8.0</LangVersion>
</PropertyGroup>

Для более старых версий Visual Studio:

  • В режиме предварительного просмотра 16.0 от 2 до 16.1 установите NullableContextOptions в enable
  • В режиме предварительного просмотра 16.0 1 установите NullableReferenceTypes в true
0 голосов
/ 05 декабря 2018

Для Visual Studio 2019 Предварительный просмотр 2 & 3 см. Ответ Иана Гриффитса

Решение для Visual Studio 2019 Предварительный просмотр 1 :

Чтобы включить функцию ссылочных типов Nullable для проекта .NET Core, добавьте свойство NullableReferenceTypes в файл .csproj следующим образом:

<PropertyGroup>
  ...
  <NullableReferenceTypes>true</NullableReferenceTypes>
  <LangVersion>8.0</LangVersion>
</PropertyGroup>

As @JulienCouvreurв комментариях, касающихся https://github.com/dotnet/project-system/issues/4058, новое свойство еще не поддерживается в «старой» системе проектов.Но будет поддерживаться до выпуска C # 8.0.

...