IAsyncEnumerable <> не работает в VS 2019 превью 2 (Core 3.0 превью 1) - PullRequest
0 голосов
/ 25 января 2019

После установки 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».
Не достаточно ли настройки проекта? больше не глобально?

Ответы [ 3 ]

0 голосов
/ 26 января 2019

Проблема 1

Отсутствует необходимый компилятор элемент 'System.Collections.Generic.IAsyncEnumerable`1.GetAsyncEnumerator'

Решение

Установить .NETCore v3.0.100-preview-010177

https://github.com/dotnet/core-sdk#installers-and-binaries

Пояснение

Произошло резкое изменение IAsyncEnumerable с .NET Core 3 Preview 1 на .NET CorePreview 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

Аннотация для ссылочных типов, допускающих значение NULL, должна использоваться только в коде в контексте «#nullable»

Решение

Изменить <NullableReferenceTypes>true</NullableReferenceTypes>

на

<NullableContextOptions>enable</NullableContextOptions>

Пояснение

Это серьезное изменение от предварительного просмотра VS2019 к предварительному просмотру VS2019 2.

Типы ссылок Nullable

Мы добавили больше опций для управления пустыми предупреждениями как в источнике (через директивы предупреждений #nullable и #pragma), так и на уровне проекта.Мы также изменили разрешение на включение файла проекта.

Источник: https://blogs.msdn.microsoft.com/dotnet/2019/01/24/do-more-with-patterns-in-c-8-0/

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

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

<PropertyGroup>
  <LangVersion>8.0</LangVersion>
  <Nullable>enable</Nullable>
</PropertyGroup>
0 голосов
/ 25 января 2019

Замена

<NullableReferenceTypes>true</NullableReferenceTypes>

С

<NullableContextOptions>enable</NullableContextOptions>

Исправлены проблемы с обнуляемыми ссылочными типами.

EDIT:

Возможно, стоит иметь обе опции в файле .csproj, поскольку образы Docker dotnet еще не были обновлены и не будут работать, поскольку он не распознает новый тег ссылочного типа, допускающий нулевое значение

...