Uygulama klasörü yolunu elde etmenin bazı yolları olduğunu görüyorum:
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)
Duruma bağlı olarak en iyi yol nedir?
AppDomain.CurrentDomain.BaseDirectory
muhtemelen konumu uygulama yükleme dizinine göre olan dosyalara erişmek için en kullanışlı olanıdır.
Bir ASP.NET uygulamasında bu, bin alt klasörü değil, uygulama kök dizini olacaktır - ki muhtemelen genellikle istediğiniz de budur. Bir istemci uygulamasında, ana çalıştırılabilir dosyayı içeren dizin olacaktır.
Bir VSTO 2005 uygulamasında bu, örneğin Excel çalıştırılabilir dosyasının yolu değil, uygulamanız için VSTO yönetilen derlemelerini içeren dizin olacaktır.
Diğerleri ortamınıza bağlı olarak farklı dizinler döndürebilir - örneğin @Vimvq1987'nin yanıtına bakın.
CodeBasebir dosyanın bulunduğu yerdir ve http:// ile başlayan bir URL olabilir. Bu durumda
Locationmuhtemelen montaj indirme önbelleği olacaktır. CodeBase
in GAC içindeki derlemeler için ayarlanması garanti edilmez.
Bu yöntemlerin hepsinin aynı değeri döndürmeyeceğini unutmayın. Bazı durumlarda aynı değeri döndürebilirler, ancak dikkatli olun, amaçları farklıdır:
Application.StartupPath
StartupPath
parametresini döndürür (uygulama çalıştırılırken ayarlanabilir)
System.IO.Directory.GetCurrentDirectory()
Geçerli dizini döndürür; bu, uygulamanın bulunduğu klasör olabilir veya olmayabilir. Aynı şey Environment.CurrentDirectory
için de geçerlidir. Bunu bir DLL dosyasında kullanmanız durumunda, işlemin çalıştığı yerin yolunu döndürür (bu özellikle ASP.NET için geçerlidir).
Bir web uygulaması için, geçerli web uygulaması kök dizinini almak üzere, genellikle geçerli gelen istek için web sayfası tarafından çağrı yapılır:
HttpContext.Current.Server.MapPath();
System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;