IAsyncEnumerable<>在VS 2019预览版2(Core 3.0预览版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行中存在Nullability警告(在vs19中,预览1可以):

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

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

问题1

缺少编译器必需的成员"System.Collections.Generic.IAsyncEnumerable`1.GetAsyncEnumerator">

解决方案

安装.NET Core 3.0.100-preview-010177

https://github.com/dotnet/core-sdk#installers-和二进制

解释

IAsyncEnumerable从.NET Core 3 Preview 1更改为.NET Core Preview 2

异步流

我们更改了编译器所期望的IAsyncEnumerable接口的形状!这会使编译器与.NET Core 3.0 Preview 1中提供的接口不同步,这可能会给您带来一些麻烦。然而,.NET Core 3.0预览版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预览1到VS2019预览2的突破性变化。

空引用类型

我们添加了更多选项来控制源代码(通过#nullable和#pragma警告指令)和项目级别的可为null的警告。我们还将项目文件opt-in更改为启用。

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

更换

<NullableReferenceTypes>true</NullableReferenceTypes>

<NullableContextOptions>enable</NullableContextOptions>

修复了我使用可为null的引用类型的问题。

编辑:

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

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

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

最新更新