获取Application_Start中的当前应用程序物理路径

Ale*_*lex 42 c# asp.net

我无法使用Application_Start中的当前物理路径

HttpContext.Current.Request.PhysicalApplicationPath
Run Code Online (Sandbox Code Playgroud)

因为那时没有Request对象.

我怎样才能获得物理路径?

ric*_*ott 48

 protected void Application_Start(object sender, EventArgs e)
 {
     string path = Server.MapPath("/");
     //or 
     string path2 = Server.MapPath("~");
     //depends on your application needs

 }
Run Code Online (Sandbox Code Playgroud)


bat*_*ssc 24

我使用ASP.Net WebForms创建了一个网站,您可以在其中查看使用Azure中某个站点的先前响应中提到的所有表单的结果.

http://wfserverpaths.azurewebsites.net/

摘要:


Server.MapPath("/") => D:\home\site\wwwroot\
Run Code Online (Sandbox Code Playgroud)
Server.MapPath("~") => D:\home\site\wwwroot\
Run Code Online (Sandbox Code Playgroud)
HttpRuntime.AppDomainAppPath => D:\home\site\wwwroot\
Run Code Online (Sandbox Code Playgroud)
HttpRuntime.AppDomainAppVirtualPath => /
Run Code Online (Sandbox Code Playgroud)
AppDomain.CurrentDomain.BaseDirectory => D:\home\site\wwwroot\
Run Code Online (Sandbox Code Playgroud)
HostingEnvironment.MapPath("/") => D:\home\site\wwwroot\
Run Code Online (Sandbox Code Playgroud)
HostingEnvironment.MapPath("~") => D:\home\site\wwwroot\
Run Code Online (Sandbox Code Playgroud)


Dot*_*ser 23

你也可以使用

HttpRuntime.AppDomainAppVirtualPath
Run Code Online (Sandbox Code Playgroud)

  • 对于物理路径,您实际上需要`HttpRuntime.AppDomainAppPath`,它"获取当前应用程序域中托管的应用程序的应用程序目录的物理驱动器路径".`HttpRuntime.AppDomainAppVirtualPath`实际上获得了一个虚拟路径,例如"/ MyApp".无论哪种方式,使用HttpRuntime是获取应用程序物理路径的最佳方式,因为它在每个上下文中都可用,包括静态上下文,甚至在`HttpApplication`对象可用之前. (10认同)

TJF*_*TJF 16

使用 Server.MapPath("~")

   

  • 并且`HttpRuntime.AppDomainAppPath`比任何这些都更好,因为它适用于任何上下文,包括静态上下文,而所有其他选项都需要通过`Server`属性访问`HttpServerUtility`实例,该属性仅在上下文中可用应用程序事件(如"Application_Start")或活动Web请求中的事件. (9认同)
  • 这比Server.MapPath("/")更好; 因为Web应用程序的路径可能与根应用程序的路径不同. (4认同)

sk2*_*185 9

您可以使用此代码:

AppDomain.CurrentDomain.BaseDirectory


abz*_*rak 5

最好的选择是使用

AppDomain.CurrentDomain.BaseDirectory
Run Code Online (Sandbox Code Playgroud)

因为它在系统命名空间中并且不依赖system.web

这样你的代码会更便携