Beste manier om het applicatiemap pad te krijgen

Ik zie dat er een aantal manieren zijn om de applicatie map pad te krijgen:

  1. Application.StartupPath
  2. System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().Location).
  3. AppDomain.CurrentDomain.BaseDirectory.
  4. System.IO.Directory.GetCurrentDirectory().
  5. Environment.CurrentDirectory.
  6. System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase).
  7. System.IO.Path.GetDirectory(Application.ExecutablePath)

Wat is de beste manier, afhankelijk van de situatie?

Oplossing

AppDomain.CurrentDomain.BaseDirectory is waarschijnlijk het meest bruikbaar voor het benaderen van bestanden waarvan de locatie relatief is aan de installatiemap van de applicatie.

In een ASP.NET applicatie zal dit de applicatie root directory zijn, niet de bin subfolder - wat waarschijnlijk is wat u meestal wilt. In een client-toepassing zal dit de directory zijn die het hoofduitvoerbare bestand bevat.

In een VSTO 2005 applicatie is dit de directory met de VSTO managed assemblies voor uw applicatie, niet bijvoorbeeld het pad naar de Excel executable.

De anderen kunnen verschillende directories teruggeven afhankelijk van uw omgeving - zie bijvoorbeeld @Vimvq1987's antwoord.

CodeBase is de plaats waar een bestand werd gevonden en kan een URL zijn die begint met http://. In dat geval zal Location waarschijnlijk de assembly download cache zijn. CodeBase is niet gegarandeerd ingesteld voor assemblies in de GAC.

Commentaren (10)

Merk op dat niet al deze methodes dezelfde waarde zullen teruggeven. In sommige gevallen kunnen ze dezelfde waarde teruggeven, maar wees voorzichtig, hun doelen zijn verschillend:

Application.StartupPath

geeft de StartupPath parameter terug (kan worden ingesteld bij het uitvoeren van de applicatie)

System.IO.Directory.GetCurrentDirectory()

geeft de huidige directory terug, die al dan niet de map kan zijn waar de applicatie zich bevindt. Hetzelfde geldt voor Environment.CurrentDirectory. In het geval dat je dit gebruikt in een DLL bestand, zal het het pad teruggeven van waar het proces draait (dit is vooral waar in ASP.NET).

Commentaren (3)

Voor een webapplicatie, om de huidige webapplicatie hoofddirectory te krijgen, roept u in het algemeen de webpagina op voor het huidige inkomende verzoek:

HttpContext.Current.Server.MapPath();

System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;

Bovenstaande code beschrijving

Commentaren (0)