Creé una aplicación de consola simple con el siguiente código:
Console.WriteLine(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
Console.WriteLine(System.AppDomain.CurrentDomain.BaseDirectory);
Console.WriteLine(System.Environment.CurrentDirectory);
Console.WriteLine(System.IO.Directory.GetCurrentDirectory());
Console.WriteLine(Environment.CurrentDirectory);
Copié el ejecutable resultante en C:\temp2
. Luego coloqué un acceso directo a ese ejecutable C:\temp3
y lo ejecuté (una vez desde el propio exe y otra desde el acceso directo). Dio las siguientes salidas en ambas ocasiones:
C:\temp2
C:\temp2\
C:\temp2
C:\temp2
C:\temp2
Si bien estoy seguro de que debe haber alguna razón para explicar por qué hay cinco métodos diferentes que hacen exactamente lo mismo, ciertamente no sé qué es. Sin embargo, parecería que, en la mayoría de las circunstancias, usted es libre de elegir el que desee.
ACTUALIZACIÓN:
Modifiqué las propiedades de acceso directo, cambiando el campo "Iniciar en:" a C:\temp3
. Esto dio como resultado el siguiente resultado:
C:\temp2
C:\temp2\
C:\temp3
C:\temp3
C:\temp3
... que demuestra al menos algunas de las distinciones entre los diferentes métodos.