5

安装 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 Missing compiler required member 'System.Collections.Generic.IAsyncEnumerable`1.GetAsyncEnumerator'

对象浏览器显示 Collections.Generic 中的成员。

有任何想法吗?等待 Core 3.0 预览版 2?

IAsyncEnumerable 之类的东西在 C# 8.0 预览版中不起作用

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”上下文中的代码中使用。
项目设置不够?不再是全球性的了吗?

4

3 回答 3

8

问题 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 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 警告指令)和项目级别的可空警告。我们还更改了项目文件 opt-in 以启用。

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

于 2019-01-25T21:45:23.640 回答
3

更换

<NullableReferenceTypes>true</NullableReferenceTypes>

<NullableContextOptions>enable</NullableContextOptions>

修复了可空引用类型的问题。

编辑:

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

于 2019-01-25T18:23:50.650 回答
0

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

<PropertyGroup>
  <LangVersion>8.0</LangVersion>
  <Nullable>enable</Nullable>
</PropertyGroup>
于 2019-05-23T03:31:46.590 回答