IAsyncEnumerable<> не работает в VS 2019 превью 2 (Core 3.0 превью 1)
После установки VS 2019 preview 2 я получаю множество ошибок. Демонстрационный код ошибки:
public class Class1 {
public static async IAsyncEnumerable<int> Get()
{
for( int i = 0; i < 10; i++ ) {
await Task.Delay( 100 );
yield return i;
}
}
}
и еще ничего (новый проект DLL)!
С предварительным просмотром 1 было в порядке.
Проект:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
<LangVersion>8.0</LangVersion>
</PropertyGroup>
</Project>
Сообщение об ошибке: Ошибка CS0656 Отсутствует обязательный элемент компилятора 'System.Collections.Generic.IAsyncEnumerable`1.GetAsyncEnumerator'
Обозреватель объектов показывает участника в Collections.Generic.
Есть идеи? В ожидании Core 3.0 Preview 2?
Что-то вроде IAsyncEnumerable не работает в C# 8.0 предварительного просмотра?
Другая проблема с VS 2019 P2 (другой проект): предупреждения Nullabilty, хотя есть строка NullableReferenceTypes (в vs 19 предварительный просмотр 1 был в порядке):
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
<LangVersion>8.0</LangVersion>
**<NullableReferenceTypes>true</NullableReferenceTypes>**
Предупреждение:
Предупреждение CS8632 Аннотацию для ссылочных типов, допускающих нулевое значение, следует использовать только в коде в контексте "#nullable".
Не достаточно ли настройки проекта? больше не глобальный?
2 ответа
Проблема 1
Отсутствует компилятор, необходимый член 'System.Collections.Generic.IAsyncEnumerable`1.GetAsyncEnumerator'
Решение
Установите.NET Core v3.0.100-preview-010177
https://github.com/dotnet/core-sdk
объяснение
Произошло серьезное изменение IAsyncEnumerable
из.NET Core 3 Preview 1 в.NET Core Preview 2
Асинхронные потоки
Мы изменили форму интерфейса IAsyncEnumerable, который ожидает компилятор! Это приводит к тому, что компилятор не синхронизируется с интерфейсом, предусмотренным в.NET Core 3.0 Preview 1, что может вызвать некоторые проблемы. Однако скоро выйдет.NET Core 3.0 Preview 2, и это вернет синхронизацию интерфейсов.
Источник: https://blogs.msdn.microsoft.com/dotnet/2019/01/24/do-more-with-patterns-in-c-8-0/
Проблема 2
Аннотация для ссылочных типов, допускающих обнуляемость, должна использоваться только в коде в контексте "#nullable"
Решение
+ Изменить<NullableReferenceTypes>true</NullableReferenceTypes>
в
<NullableContextOptions>enable</NullableContextOptions>
объяснение
Это серьезное изменение по сравнению с VS2019 Preview 1 до VS2019 Preview 2.
Обнуляемые ссылочные типы
Мы добавили больше опций для управления пустыми предупреждениями как в источнике (через директивы предупреждений #nullable и #pragma), так и на уровне проекта. Мы также изменили разрешение на включение файла проекта.
Источник: https://blogs.msdn.microsoft.com/dotnet/2019/01/24/do-more-with-patterns-in-c-8-0/
Замена
<NullableReferenceTypes>true</NullableReferenceTypes>
С
<NullableContextOptions>enable</NullableContextOptions>
Исправлены мои проблемы с обнуляемыми ссылочными типами.
РЕДАКТИРОВАТЬ:
Возможно, стоит иметь обе опции в файле.csproj, поскольку образы Docker dotnet еще не были обновлены и не будут работать, так как он не распознает новый обнуляемый тег ссылочного типа.
В Visual Studio 16.1 имя свойства изменилось на Nullable
что проще и совпадает с аргументом командной строки.
<PropertyGroup>
<LangVersion>8.0</LangVersion>
<Nullable>enable</Nullable>
</PropertyGroup>