意外的字符"$"
案例
简单代码如下:
string path = "ProcInstLog";
if (!System.IO.Directory.Exists(path))
{
System.IO.Directory.CreateDirectory(path);
}
string file = System.IO.Path.Combine(path, K2.ProcessInstance.ID + @".log");
System.IO.File.AppendAllText(file, $"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} xxxxx" + System.Environment.NewLine);
VS2015在编译的时候出现了以下错误:
严重性 代码 说明 项目 文件 行
错误 意外的字符“$” xxx 121
根本原因在于, 创建项目时选择的.NET Framework版本为 4.5, 所以不支持 字符串内插 语法.
将项目的.NET Framework版本改为 .NET Framework 4.6 即可.
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
微软官方说明
https://learn.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-version-history#c-version-60
C# 6.0 版
发布时间:2015 年 7 月
版本 6.0 随 Visual Studio 2015 一起发布,发布了很多使得 C# 编程更有效率的小功能。 以下介绍了部分功能:
其他新功能包括:
- 索引初始化表达式
- Catch/Finally 块中的 Await
- 仅限 getter 属性的默认值
如果整体看待这些功能,你会发现一个有趣的模式。 在此版本中,C# 开始消除语言样本,让代码更简洁且更具可读性。 所以对喜欢简洁代码的用户来说,此语言版本非常成功。
除了发布此版本,他们还做了另一件事,虽然这件事本身与传统的语言功能无关。 他们发布了 Roslyn 编译器即服务。 C# 编译器现在是用 C# 编写的,你可以使用编译器作为编程工作的一部分。
C#版本与.NET版本对应关系以及各版本的特性
C#版本 | .NET版本 | 发布日期 | 特性 |
---|---|---|---|
C# 1.0 | .NET Framework 1.0 | 2002-02-13 | 委托、事件 |
C# 1.1 | .NET Framework 1.1 | 2003-04-24 | APM(异步编程模型) |
C# 2.0 | .NET Framework 2.0 | 2005-11-07 | 泛型、匿名方法、迭代器、可空类型 |
C# 3.0 | .NET Framework 3.0 | 2007-11-06 | 隐式类型 |
.NET Framework 3.5 | 2007-11-19 | 对象集合初始化、自动实现属性、匿名类型、扩展方法、查询表达式、Lambda表达式、 表达式树、分部类和方法、Linq | |
C# 4.0 | .NET Framework 4.0 | 2010-04-12 | 动态绑定、命名和可选参数、泛型的协变和逆变、互操作性 |
C# 5.0 | .NET Framework 4.5 | 2012-08-15 | 异步和等待(async和await)、调用方信息(Caller Information) |
C# 6.0 | .NET Framework 4.6 | 2015-07-20 | 静态导入、C# 6 中的新增功能 |
.NET Core 1.0 | 2016-06-27 | ||
C# 7.0 | .NET Framework 4.6.2 | 2016-08-02 | 元组、C# 7.0 中的新增功能 |
C# 7.1 | .NET Framework 4.7 | 2017-04-05 | |
.NET Core 2.0 | 2016-08-14 | .NET Core 2.0 的新增功能 | |
C# 7.2 | .NET Framework 4.7.1 | 2017-10-17 | |
C# 7.3 | .NET Framework 4.7.2 | 2018-04-30 | |
.NET Core 2.1 | 2018-05-30 | .NET Core 2.1 的新增功能 | |
.NET Core 2.2 | 2018-12-04 | .NET Core 2.2 的新增功能 | |
C# 8.0 | .NET Framework 4.8 | 2019-04-18 | C# 8.0 中的新增功能 |
.NET Core 3.0 | 2019-09-23 | .NET Core 3.0 的新增功能 | |
.NET Core 3.1 | 2019-12-03 | .NET Core 3.1 的新增功能 | |
C# 9.0 | .NET 5 | 2020-09-04 | C# 9.0 中的新增功能 |
.NET 5 | 2020-10-13 | What's new in .NET 5 | |
C# 10.0 | .NET 6 | 2021-11-09 | 欢迎使用 C# 10 C# 10.0 中的新增功能 |
C# 11.0 | .NET 7 | 2022-11-08 | C# 11 中的新增功能 |
C# 12.0 | .NET 8 | 2023-06-14 | C# 12 中的新增功能 |
C# 13.0 | .NET 9 | 2024-03-25 | C# 13 中的新增功能 |