【问题标题】:IAsyncEnumerable<> broken in VS 2019 preview 2 (Core 3.0 preview 1)IAsyncEnumerable<> 在 VS 2019 预览版 2(Core 3.0 预览版 1)中损坏
【发布时间】:2019-06-19 05:44:07
【问题描述】:

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

【问题讨论】:

  • 是的,这暂时被破坏了,它将被修复。请参阅 Mads' blog 中的“自预览版 1 以来的更改”,其中提到了这两个问题。
  • 现在,谁投票结束了这个问题?它当然是可复制的并得到官方认可
  • 这绝对是“类似这种情况”,但这次你不能只添加缺少的类。 IAsyncEnumerable 存在,但方法不同。你不能用扩展方法来伪造它,任何注入缺失方法的技术都是不值得的。您将不得不使用每日构建或等待 Core 3.0 Preview 2。OTOH,鉴于这些预览的波动性,不妨使用每日构建

标签: c# c#-8.0 nullable-reference-types iasyncenumerable


【解决方案1】:

更换

&lt;NullableReferenceTypes&gt;true&lt;/NullableReferenceTypes&gt;

&lt;NullableContextOptions&gt;enable&lt;/NullableContextOptions&gt;

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

编辑:

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

【讨论】:

    【解决方案2】:

    问题 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 发生了重大变化

    异步流

    我们改变了编译器期望的 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”上下文中的代码中

    解决方案

    更改&lt;NullableReferenceTypes&gt;true&lt;/NullableReferenceTypes&gt;

    &lt;NullableContextOptions&gt;enable&lt;/NullableContextOptions&gt;

    说明

    这是从 VS2019 Preview 1 到 VS2019 Preview 2 的重大变化。

    可为空的引用类型

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

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

    【讨论】:

    • 1000 谢谢! (i) 你的回答逻辑清晰,结构完美; (ii) 没错——你救了我。
    • 谢谢@me-on-stov!不要忘记将其标记为“已回答”,以帮助开发人员在未来解决同样的问题?
    • .NET Core 3.0 预览版 2.0 just came out
    • @BrandonMinnick 这在预览版 4 中是否被重新破解,因为我今天从预览版 3 升级到 4 后遇到了这个问题?
    • 嗨@PaulManzotti!由于@me-on-stov 的原始问题集中在 Preview 2,请继续为 Preview 4 打开一个新问题并分享下面的链接 ?
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-03
      • 1970-01-01
      • 1970-01-01
      • 2017-11-12
      • 2018-08-20
      • 2022-06-14
      • 1970-01-01
      • 2019-05-08
      相关资源
      最近更新 更多