未定义或导入预定义类型'System.Runtime.CompilerServices.IsExternalInit'

时间:2020-11-09 09:57:18

标签: c#-9.0

在使用Visual Studio 2019 Preview测试C#9的新功能时遇到了这个问题。我正在测试init设置程序,但是编译器显示以下错误消息:

错误CS0518未定义或导入了“ System.Runtime.CompilerServices.IsExternalInit”预定义类型。下面是我尝试过的代码片段:

public class Book
{
     string ISBN { get; init; }
}

2 个答案:

答案 0 :(得分:10)

这是Visual Studio 2019中的一个小错误,尚未修复。为了解决这个问题,您需要在项目的任何地方添加一个名为IsExternalInit的伪类,其命名空间为System.Runtime.CompilerServices。这样就可以了。

如果要编写一个库,最好将该类设置为内部类,否则您可能会得到两个都定义相同类型的库。

    namespace System.Runtime.CompilerServices
    {
          internal static class IsExternalInit {}
    }

编辑(2020年11月16日):

根据我从C#语言团队的首席开发负责人Jared Parsons的回复中得出的结论,上述问题不是错误。编译器会引发此错误,因为我们正在针对较旧的.NET Framework版本编译.NET 5代码。请在下面查看他的消息:

感谢您抽出宝贵时间提出此反馈问题。不幸 这不是错误。 IsExternalInit类型仅包含在 net5.0(及未来)目标框架。针对较旧版本进行编译时 目标框架,您将需要手动定义此类型。

链接到Visual Studio开发者社区上的报告:https://developercommunity.visualstudio.com/content/problem/1244809/error-cs0518-predefined-type-systemruntimecompiler.html

答案 1 :(得分:2)

如果要继续使用.NET Core App 3.1,则需要添加类似demo中所述的Kinin Roza这样的类型。

但是,如果将Function2更改为将VStack (alignment: .center, spacing: 0) { DatePicker(selection: self.$enddate, in: self.endMinDate()...self.endMaxDate()) { Text("Start") }.labelsHidden() } .accentColor(MyColor.bluecolor) // << this one !! //.accentColor(.red) // << used for demo 设置为csproj,则将解决此问题,因为此类型仅在5.0中定义。

这是我的示例控制台应用程序<TargetFramework>文件。

net5.0