获取 .NET Web 应用程序中的当前目录

本文关键字:当前目录 应用程序 NET Web 获取 | 更新日期: 2023-09-27 18:36:31

所以我有一个 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'

谁能解释为什么会发生这种情况以及可能的解决方案是什么?多谢。

获取 .NET Web 应用程序中的当前目录

当前目录是系统级功能;它返回从中启动服务器的目录。 它与网站无关。

你想要HttpRuntime.AppDomainAppPath.

如果您在 HTTP 请求中,还可以调用 Server.MapPath("~/Whatever")

使用以下代码:

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

详细参考:

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

  • Server.MapPath(".")返回正在执行的文件(例如.aspx)
  • Server.MapPath("..")返回父目录
  • Server.MapPath("~")返回指向根目录的物理路径应用
  • Server.MapPath("/")返回指向根目录的物理路径域名(不一定与根应用)

举个例子:

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

C:'Inetpub'wwwroot

并安装了您的商店应用程序(子 Web 作为 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

如果 Path 以正斜杠 (/) 或反斜杠 () 开头,则 MapPath 方法返回一个路径,就好像 Path 是完整的虚拟路径一样。

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

注意:在 C# 中,@ 是逐字文本字符串运算符,这意味着字符串应"按原样"使用,而不是针对转义序列进行处理。

脚注

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

对于点网 6,我使用:

AppContext.BaseDirectory

很酷的是,它在 asp.net 和控制台应用程序上都是相同的。