Criei um aplicativo de console simples com o seguinte 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);
Copiei o executável resultante para C:\temp2
. Coloquei um atalho para o executável em C:\temp3
e o executei (uma vez do exe em si e outra vez do atalho). Ele forneceu as seguintes saídas nas duas vezes:
C:\temp2
C:\temp2\
C:\temp2
C:\temp2
C:\temp2
Embora tenha certeza de que deve haver algum motivo para explicar por que existem cinco métodos diferentes que fazem praticamente a mesma coisa, certamente não sei o que é. No entanto, parece que, na maioria das circunstâncias, você é livre para escolher o que quiser.
ATUALIZAÇÃO:
modifiquei as propriedades do atalho, alterando o campo "Iniciar em:" para C:\temp3
. Isso resultou na seguinte saída:
C:\temp2
C:\temp2\
C:\temp3
C:\temp3
C:\temp3
... o que demonstra pelo menos algumas das distinções entre os diferentes métodos.