Vejo que existem algumas maneiras de obter o caminho da pasta de aplicações:
System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().Location)
System.IO.Directory.GetCurrentDirectory()
System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
System.IO.Path.GetDirectory(Application.ExecutablePath)
Qual é a melhor maneira, dependendo da situação?
O `AppDomain.CurrentDomain.BaseDirectory' é provavelmente o mais útil para acessar arquivos cuja localização é relativa ao diretório de instalação do aplicativo.
Em uma aplicação ASP.NET, este será o diretório raiz da aplicação, não a subpasta bin - que é provavelmente o que você normalmente quer. Em uma aplicação cliente, será o diretório que contém o executável principal.
Em uma aplicação VSTO 2005, será o diretório contendo as montagens gerenciadas pela VSTO para sua aplicação e não, digamos, o caminho para o executável Excel.
Os outros podem retornar diretórios diferentes dependendo do seu ambiente - por exemplo, veja @Vimvq1987's resposta.
O 'CodeBase' é o local onde um arquivo foi encontrado e pode ser uma URL que começa com http://. Nesse caso, o `Local' será provavelmente o cache de download do assembly. O CodeBase não é garantido para assembléias no GAC.
Note que nem todos estes métodos retornarão o mesmo valor. Em alguns casos, eles podem retornar o mesmo valor, mas tenha cuidado, seus propósitos são diferentes:
Application.StartupPath
retorna o parâmetro StartupPath
(pode ser definido ao executar a aplicação)
System.IO.Directory.GetCurrentDirectory()
retorna o diretório atual, que pode ou não ser a pasta onde a aplicação está localizada. O mesmo vale para o `Environment.CurrentDirectory'. Caso você esteja usando isso em um arquivo DLL, ele retornará o caminho de onde o processo está rodando (isso é especialmente verdade no ASP.NET).
Para uma aplicação web, para obter o directório raiz da aplicação web actual, geralmente chamada por página web para a requisição de entrada actual:
HttpContext.Current.Server.MapPath();
System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;