为什么此赋值语句在.NET Framework中有效但在.NET Core中无效?

时间:2017-04-24 21:48:32

标签: c# asp.net-core .net-core

这是数据库的连接字符串:

 private string _connString => $"Data Source={Server.MapPath(@"~\Data")}\\PhoneNumbers.sqlite";

我的朋友在.NET Framework程序中使用了这一行并且它有效。我们都在.NET Core中尝试过这种变体,但这行是错误的。它没有有用的错误代码。我认为Visual Studio 2017认为这是一个无效的声明。

为什么这是一个错误?

2 个答案:

答案 0 :(得分:7)

字符串插值没有问题。

Server.MapPath在.NET Core中不可用。这个类(和方法)是IIS specific

ASP .NET Core的重点是使框架服务器不可知,因此引入了几个新的抽象。

您需要使用IHostingEnvironment来解析路径。

Blog post with an example

答案 1 :(得分:-1)

字符串插值是C#6.0的一个特性,所以理论上 只要你有VS2015 +就可以工作。 Core 1.0附带C#6.0。但是,这两个框架之间可能存在一些差异,导致该功能无法在Core中运行。您可以重写该行,以便代码向后兼容。

private string _connString = String.Format("Data Source={0}\\PhoneNumbers.sqlite", Server.MapPath(@"~\Data"));