Visual Studio 2022中C# Interactive无法访问DateTime.UnixEpoch的问题
问题场景
在目标框架为.NET 7.0的常规项目代码中,DateTime.UnixEpoch可以正常调用,但在Visual Studio 2022 17.7.3的C# Interactive环境中使用该字段时,会触发CS0117编译错误,提示'DateTime' does not contain a definition for 'UnixEpoch'。
复现代码(C# Interactive)
> double timeStamp = 1693620016; . DateTime dateTime = DateTime.UnixEpoch; . dateTime = dateTime.AddSeconds(timeStamp); . Console.WriteLine(dateTime.Date);
报错信息
(2,30): error CS0117: 'DateTime' does not contain a definition for 'UnixEpoch'
核心原因
DateTime.UnixEpoch是**.NET 6及以上版本才引入的API**,而C# Interactive窗口默认使用的运行时框架版本通常低于.NET 6(比如绑定.NET Framework或.NET Core 3.1等旧版本)。即使当前项目的目标框架是.NET 7,C# Interactive并不会自动同步项目的框架设置,仍会使用自身默认的低版本运行时,导致无法识别该新API。
验证方法
在C# Interactive窗口中输入以下代码,即可查看当前使用的框架版本:
> Console.WriteLine(System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription);
如果输出为.NET Framework 4.8.xxx或.NET Core 3.1.xxx这类低于.NET 6的版本,就可以确认是框架版本不匹配导致的问题。
解决办法
方法一:切换Interactive的目标框架
打开Visual Studio的「工具」→「选项」→「环境」→「预览功能」,勾选“使用.NET SDK风格的项目系统的C# Interactive”(部分Visual Studio版本有此选项),开启后Interactive会同步当前项目的目标框架。方法二:手动指定框架加载
在C# Interactive窗口中先执行以下命令,手动加载.NET 7.0的程序集:> #r "net7.0"加载完成后再执行原代码,即可正常访问
DateTime.UnixEpoch。
内容的提问来源于stack exchange,提问作者Ivang

