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

时间:2019-01-25 11:29:16

标签: c# c#-8.0 iasyncenumerable

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

类似于IAsyncEnumerable not working in C# 8.0 preview 中的内容吗?

VS 2019 P2的另一个问题(另一个项目): 尽管存在NullableReferenceTypes行,但仍存在Nullabilty警告(在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 :(得分:8)

问题1

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

解决方案

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

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

说明

{。{1}}从.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”上下文中的代码中使用

解决方案

更改 var moneyString = "40 Thousand"; var charArray = moneyString.ToCharArray(); foreach (var character in charArray) { if (Char.IsLetter(character)) { // Likely not acceptable } }

IAsyncEnumerable

说明

这是从VS2019预览版1到VS2019预览版2的重大更改。

  

可引用类型

     

我们添加了更多选项来控制源(通过#nullable和#pragma警告指令)和项目级别的可为空的警告。我们还更改了启用项目文件的功能。

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

答案 1 :(得分:3)

替换

<NullableReferenceTypes>true</NullableReferenceTypes>

使用

<NullableContextOptions>enable</NullableContextOptions>

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

编辑:

.csproj文件中的两个选项可能都值得,因为dotnet Docker映像尚未更新,并且由于无法识别新的可为空的引用类型标记而失败

答案 2 :(得分:0)

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

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