.NET Standard 2.1中接口静态抽象成员报错CS8919求助
问题
在.NET Standard 2.1项目里尝试创建带静态抽象成员的接口,已经在项目文件中设置<LangVersion>11.0</LangVersion>启用C#11,但遇到报错:
CS8919 Target runtime doesn't support static abstract members in interfaces.
项目文件代码:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard2.1</TargetFramework> <LangVersion>11.0</LangVersion> <Nullable>enable</Nullable> </PropertyGroup> </Project>
C#代码:
public interface ITest { static abstract int GetInt(); }
请问能不能通过安装NuGet包或者其他方式解决这个问题?
解决方案
核心原因:接口的静态抽象成员是.NET 7及以上版本运行时才原生支持的特性,.NET Standard 2.1本身不包含该运行时层面的实现,仅设置C#语言版本不够——语言特性的正常工作依赖底层运行时的支持。
解决办法:
- 升级目标框架(推荐):把项目的
<TargetFramework>改成net7.0或更高版本(比如net8.0),这样能直接获得运行时对该特性的原生支持,不用额外配置。修改后的项目文件PropertyGroup部分如下:<PropertyGroup> <TargetFramework>net7.0</TargetFramework> <LangVersion>11.0</LangVersion> <Nullable>enable</Nullable> </PropertyGroup> - 兼容包临时方案(不推荐):如果必须保留.NET Standard 2.1,可以安装
System.Runtime.CompilerServices.Unsafe和System.Linq.Expressions这类NuGet包,但这种方式只能在部分场景下绕过编译错误,运行时仍可能出现兼容性问题,无法保证所有场景正常工作,不适合长期使用。
- 升级目标框架(推荐):把项目的
内容的提问来源于stack exchange,提问作者Little Endian
相关产品推荐
相关产品推荐

