在.NET web 应用程序中获得工作目录

所以我有一个 web 项目,我试图使用 c # 方法 Directory.GetCurrentDirectory()获取网站的根目录。我不想使用静态路径,因为文件位置将在未来发生变化。这个方法在我的 imageprocess.aspx.cs 文件中运行,但是在我认为它会返回的地方:

C:\Users\tcbl\documents\visual studio 2010\Projects\ModelMonitoring\ModelMonitoring\imageProcess.aspx.cs

相反,我得到的是:

C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\

有人能解释一下为什么会发生这种情况,以及可能的解决方案是什么吗? 非常感谢。

240796 次浏览

The current directory is a system-level feature; it returns the directory that the server was launched from. It has nothing to do with the website.

你想要 HttpRuntime.AppDomainAppPath

如果处于 HTTP 请求中,也可以调用 Server.MapPath("~/Whatever")

使用以下代码:

 HttpContext.Current.Server.MapPath("~")

详细资料:

Server.MapPath指定映射到物理目录的相对路径或虚拟路径。

  • 类的当前物理目录 正在执行的文件(例如 aspx)
  • Server.MapPath("..") returns the parent directory
  • 类的根的物理路径 申请
  • 类的根的物理路径 域名(不一定与 申请)

举个例子:

假设您将一个网站应用程序(http://www.example.com/)指向

C:\Inetpub\wwwroot

并安装您的商店应用程序(子网络作为 IIS 中的虚拟目录,标记为应用程序)

D:\WebApps\shop

例如,如果在以下请求中调用 Server.MapPath:

http://www.example.com/shop/products/GetProduct.aspx?id=2342

然后:

Server.MapPath(".") returns D:\WebApps\shop\products
Server.MapPath("..") returns D:\WebApps\shop
Server.MapPath("~") returns D:\WebApps\shop
Server.MapPath("/") returns C:\Inetpub\wwwroot
Server.MapPath("/shop") returns D:\WebApps\shop

If Path starts with either a forward (/) or backward slash (), the MapPath method returns a path as if Path were a full, virtual path.

如果 Path 不以斜杠开始,则 MapPath方法返回相对于正在处理的请求的目录的路径。

注意: 在 C # 中,@是逐字逐句的字符串操作符,这意味着字符串应该“按原样”使用,而不是对转义序列进行处理。

脚注

Server.MapPath(null)Server.MapPath("")也会产生这种效果。

对于.net 6,我使用:

AppContext.BaseDirectory

Cool thing about that is that it will be the same on asp.net and also on a console application.