Обнуляемые ссылочные типы в проектах .NET Framework, не работающие с IntelliSense

Когда я создаю новое консольное приложение (.NET Framework 4.8) и пытаюсь использовать ссылочные типы C # 8, допускающие значение NULL, я вижу следующее:

«Аннотации

И я получаю это предупреждение в своих выводах сборки:

warning CS8632: The annotation for nullable reference types should only be used in code within a '#nullable' annotations context.

Понятно, что я еще не включил ссылочные типы, допускающие значение NULL. Я добавляю в свой .csproj следующее:

<Nullable>enable</Nullable>

Это приводит к исчезновению предупреждения о сборке, но Visual Studio IntelliSense продолжает жаловаться.

Как мне настроить Visual Studio, чтобы она понимала, что я использую ссылочные типы, допускающие значение NULL, в моем проекте .NET Framework, не используя везде #nullable?


Напротив, если я создам новое консольное приложение .NET Core 3.0, все будет работать так, как ожидалось.


person Rudey    schedule 29.09.2019    source источник
comment
К сожалению, функции C # 8 доступны только для Net Core 3.   -  person Karel Kral    schedule 29.09.2019
comment
@KarelKral у вас есть источник для этого? Я не думаю, что это правда, проекты .NET Framework хорошо работают при использовании ссылочных типов, допускающих значение NULL. Моя единственная проблема в том, что IntelliSense их не понимает.   -  person Rudey    schedule 29.09.2019
comment
Это должно работать: one, два. Возможно, неочевидным шагом является то, что вам нужно закрыть и снова открыть решение или перезапустить VS после редактирования файла проекта, чтобы синтаксический анализатор IS мог по-новому взглянуть на него.   -  person Hans Passant    schedule 29.09.2019
comment
@Rudey Извини, похоже, я ошибся. Я пробовал использовать C # 8, и у меня ничего не получалось до Core 3.   -  person Karel Kral    schedule 29.09.2019
comment
@Rudey, это проблема Visual Studio - Intellisense - это функция VS. Какую версию VS вы используете?   -  person Panagiotis Kanavos    schedule 30.09.2019
comment
Какая это версия Visual Studio? И обновлялось?   -  person Lasse V. Karlsen    schedule 30.09.2019
comment
Я использую Visual Studio Enterprise 2019 версии 16.3.1.   -  person Rudey    schedule 30.09.2019
comment
@HansPassant Команды .NET решили, что это не должно работать: github.com/dotnet/project-system/issues/   -  person jnm2    schedule 25.10.2019
comment
Хмя, отсутствие поддержки для программистов Microsoft не означает, что это не работает, это означает, что они могут быстро закрыть отчеты об ошибках. Так что, я думаю, мы тоже можем это сделать, релиз 16.3.0 сломал много кода.   -  person Hans Passant    schedule 25.10.2019
comment
@KarelKral См. здесь, как заставить его работать.   -  person Zev Spitz    schedule 03.12.2019


Ответы (2)


Как мне настроить Visual Studio, чтобы она понимала, что я использую ссылочные типы, допускающие значение NULL, в моем проекте .NET Framework, не используя везде #nullable?

Боюсь, ответ будет отрицательным, поскольку это может быть одна из проблем с VS Intellisense.

Я обнаружил, что msbuild (система сборки VS) может хорошо распознавать C#8.0 в .net framework4.8 проектах во время процесса сборки. Но Intellisense (одна функция VS) не может, поэтому я сообщил об этом. Если кого-то интересует эта проблема, дополнительные сведения о ней см. На странице Intellisense не может распознать C # 8.0 в проекте, предназначенном для .NET Framework 4.8.

Поведение таково, что Intellisense не отображает правильное сообщение для нас в .net framework 4.8 проекте с C#8.0. И это одна из проблем, с которой можно справиться только с помощью исправления. Таким образом, нет действительного способа решить эту проблему с Intellisense (функция VS), если исправление не произойдет после того, как мы сообщим об этой проблеме. Мы можем Suppress or Configure CS8632's severity, но это плохая идея ..

person LoLance    schedule 01.10.2019
comment
Жаль, что Microsoft ничего не делает с этим. - person Rudey; 24.10.2019
comment
Только что видел обновление в DC, извините за неудобства, C # 8.0 не полностью поддерживается в .NET Framework. Вы можете получить более подробную информацию по этой ссылке :) - person LoLance; 25.10.2019

Попробуйте обновить vs2019 до 16.3.2, у меня работает

person zs21cn    schedule 04.10.2019
comment
Не работает для проектов .NET Framework, о чем и идет этот вопрос. Примечания к выпуску 16.3.2 также вообще ничего не говорите о ссылочных типах, допускающих значение NULL. - person Rudey; 24.10.2019
comment
@Rudey Я использую VS Community 16.3.9 с проектом .NET Framework 4.7.2. Он отлично распознает аннотации, допускающие значение NULL. - person Zev Spitz; 03.12.2019
comment
Используете ли вы старый формат .csproj или новый (SDK) .csproj? - person Rudey; 04.12.2019