C# 使用GetCurrentDirectory函数为同一位置获取两个不同的值

C# 使用GetCurrentDirectory函数为同一位置获取两个不同的值,c#,asp.net-core-2.2,C#,Asp.net Core 2.2,我下载了一个ASP.NETCore2.2MVC项目。它运转良好。但当我在系统中创建新的Asp.NETCore2.2MVC项目并从下载的项目中复制所有代码时,一个GetCurrentDirectory函数无法正常工作 我正在使用以下代码: Path.Combine(Directory.GetCurrentDirectory(), location, fileName) 我的项目在D区。 我下载的项目显示了正确的路径。但我创建的项目如下所示: C:\Program Files\IIS Expres

我下载了一个ASP.NETCore2.2MVC项目。它运转良好。但当我在系统中创建新的Asp.NETCore2.2MVC项目并从下载的项目中复制所有代码时,一个GetCurrentDirectory函数无法正常工作

我正在使用以下代码:

Path.Combine(Directory.GetCurrentDirectory(), location, fileName)
我的项目在D区。 我下载的项目显示了正确的路径。但我创建的项目如下所示:

C:\Program Files\IIS Express\data\people.json


有人能帮我解释一下为什么会发生这种情况吗?

在ASP.NET Core 2.2.0中使用IIS进程内托管时,当前目录设置为IIS应用程序本身的目录,因此在调试时,它是IIS Express的位置:C:\Program Files\IIS Express


此行为将在ASP.NET Core 2.2.2中修复,以便更加直观并匹配应用程序在磁盘上的位置:

GetCurrentDirectory方法从操作系统的角度返回当前目录,而不是启动可执行文件的目录。该代码很容易导致安全漏洞。如果位置来自用户输入,则类似于..\..\Windows的值将映射到C:\Windows。首先检查为什么要创建绝对路径?为什么不在配置阶段从Content Root中指定的路径加载此文件?但是我已经下载了一个项目,如果我正在运行该项目,它会显示我的项目的正确位置。这两个项目之间的调试/托管设置可能不同。如果没有要查看的项目本身,我真的无法判断。请查看.csproj文件-您的新文件将包含.InProcess也是默认值,因此如果没有设置任何值,将使用该文件。或者,该值可能在元素的Web.config中被重写。这不是真的-。