2017-04-24 56 views
-6

这是一个数据库连接字符串:为什么此赋值语句在.NET Framework中工作,但不在.NET Core中工作?

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

我的朋友使用这条线在.NET框架程序和它的工作。我们都在.NET Core中尝试过这种变体,但是这一行是错误的。它没有有用的错误代码。我认为Visual Studio 2017认为这是一个无效的陈述。

为什么这是一个错误?

+7

**错误说**是什么?什么样的错误? – SLaks

+0

是否在每个变体的范围内都有'Server'类? (“范围”并不完全是我在这里寻找的词,但是我画了一个空白,是否有适当的'using'语句或其他什么东西?) – adv12

+0

这就是问题所在。它不给我任何有用的代码。如果我粘贴该行,则会在此语句之前和之后出现红线。 VS问我是否要将该语句转换为方法。 –

回答

-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")); 
7

字符串插值没有任何问题。

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

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

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

Blog post with an example

+0

当我尝试使用Microsoft.AspNetCore.Hosting添加 时,出现更多错误: 我的程序。 AspNetCore不存在于Microsoft的命名空间中。 –

+0

很可能你需要一个http://www.nuget.org/packages/Microsoft.AspNetCore.Hosting/ NuGet包 –

相关问题