Vedo che ci sono alcuni modi per ottenere il percorso della cartella dell'applicazione:
Application.StartupPath
.System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().Location)
AppDomain.CurrentDomain.BaseDirectory
.System.IO.Directory.GetCurrentDirectory()
Environment.CurrentDirectory
.System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
System.IO.Path.GetDirectory(Application.ExecutablePath)
Qual è il modo migliore a seconda della situazione?
AppDomain.CurrentDomain.BaseDirectory
è probabilmente il più utile per accedere ai file la cui posizione è relativa alla directory di installazione dell'applicazione.
In un'applicazione ASP.NET, questa sarà la directory principale dell'applicazione, non la sottocartella bin - che è probabilmente ciò che vuoi di solito. In un'applicazione client, sarà la directory che contiene l'eseguibile principale.
In un'applicazione VSTO 2005, sarà la directory contenente gli assembly gestiti da VSTO per la vostra applicazione, non, per esempio, il percorso dell'eseguibile di Excel.
Gli altri possono restituire directory diverse a seconda del tuo ambiente - per esempio vedi @Vimvq1987'risposta.
CodeBase
è il luogo in cui un file è stato trovato e può essere un URL che inizia con http://. In tal caso Location
sarà probabilmente la cache di download dell'assembly. Non è garantito che CodeBase sia impostato per gli assembly nella GAC.
Notate che non tutti questi metodi restituiranno lo stesso valore. In alcuni casi, possono restituire lo stesso valore, ma fate attenzione, i loro scopi sono diversi:
Application.StartupPath
restituisce il parametro StartupPath
(può essere impostato quando si esegue l'applicazione)
System.IO.Directory.GetCurrentDirectory()
restituisce la directory corrente, che può essere o meno la cartella in cui si trova l'applicazione. Lo stesso vale per Environment.CurrentDirectory
. Nel caso in cui lo stiate usando in un file DLL, restituirà il percorso di dove il processo è in esecuzione (questo è particolarmente vero in ASP.NET).
Per un'applicazione web, per ottenere la directory principale corrente dell'applicazione web, generalmente si chiama per pagina web per la richiesta corrente in arrivo:
HttpContext.Current.Server.MapPath();
System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;