You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用VS2019预览版测试C#9.0 init setter时遇CS0518错误咨询

解决Error CS0518: Predefined type 'System.Runtime.CompilerServices.IsExternalInit' is not defined or imported

这个错误我测试C# 9.0的init setter特性时也踩过坑,本质是编译器找不到IsExternalInit这个特殊标记类——它是C# 9.0为init、record这类新特性引入的,部分旧版.NET框架或者SDK环境里默认没有内置它的定义。给你几个靠谱的解决方案:

方案1:切换到.NET 5+目标框架

如果你的项目允许升级目标框架,直接把项目目标框架改成.NET 5或更高版本就行。从.NET 5开始,SDK已经内置了IsExternalInit的定义,不需要额外操作。

操作步骤:

  • 右键项目 → 属性 → 应用程序 → 目标框架,选择.NET 5.0及以上版本。

方案2:手动添加IsExternalInit类(适配旧框架)

如果必须保留.NET Framework、.NET Core 3.x这类旧目标框架,你可以在项目里手动创建一个空的IsExternalInit类,完全能满足编译器的要求:

新建一个名为IsExternalInit.cs的文件,写入以下代码:

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

额外检查:确认语言版本设置正确

别忘了确保项目的C#语言版本已经设置为C# 9.0或更高:

  • 右键项目 → 属性 → 生成 → 高级 → 语言版本,选择“C# 9.0”或者“最新预览版”(如果你用的是VS预览版的话)。

现在再测试你的代码(我给ISBN加了public修饰符,否则默认private,外部无法用init初始化,不过这不是你报错的原因):

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

应该就能正常编译啦!

内容的提问来源于stack exchange,提问作者Kevin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 20:37:48