IAsyncEnumerable<> 在 VS 2019 预览版 2(Core 3.0 预览版 1)中损坏

IAsyncEnumerable<> broken in VS 2019 preview 2 (Core 3.0 preview 1)

安装 VS 2019 预览版 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 预览版 2?

类似于 IAsyncEnumerable 的内容在 C# 8.0 预览版中不起作用

VS 2019 P2的另一个问题(另一个项目): 尽管存在 NullableReferenceTypes 行,但出现可空性警告(在 vs 19 中,预览 1 没问题):

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <LangVersion>8.0</LangVersion>
    **<NullableReferenceTypes>true</NullableReferenceTypes>**

警告:
警告 CS8632 可为 null 的引用类型的注释只能在“#nullable”上下文中的代码中使用。
项目设置不够?不再是全球性的了吗?

正在替换

<NullableReferenceTypes>true</NullableReferenceTypes>

<NullableContextOptions>enable</NullableContextOptions>

解决了我的可空引用类型问题。

编辑:

可能值得在 .csproj 文件中同时使用这两个选项,因为 dotnet Docker 图像尚未更新并且会失败,因为它无法识别新的可为 null 的引用类型标记

问题 1

缺少编译器所需的成员'System.Collections.Generic.IAsyncEnumerable`1.GetAsyncEnumerator'

解决方案

安装 .NET Core v3.0.100-preview-010177

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

说明

IAsyncEnumerable 从 .NET Core 3 预览版 1 到 .NET Core 预览版 2 发生了重大变化

Async streams

We changed the shape of the IAsyncEnumerable interface the compiler expects! This brings the compiler out of sync with the interface provided in .NET Core 3.0 Preview 1, which can cause you some amount of trouble. However, .NET Core 3.0 Preview 2 is due out shortly, and that brings the interfaces back in sync.

来源: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 预览版 1 到 VS2019 预览版 2 的重大更改。

Nullable reference types

We’ve added more options to control nullable warnings both in source (through #nullable and #pragma warning directives) and at the project level. We also changed the project file opt-in to enable.

来源:https://blogs.msdn.microsoft.com/dotnet/2019/01/24/do-more-with-patterns-in-c-8-0/

在 Visual Studio 16.2 中,属性 名称更改为 Nullable,它更简单并且与命令行参数一致。

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