Я створив просту консольну програму із наступним кодом:
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);
Я скопіював отриманий виконуваний файл у C:\temp2
. Потім я помістив ярлик до цього виконуваного файлу C:\temp3
і запустив його (один раз із самого EXE і один раз із ярлика). Обидва рази давали такі результати:
C:\temp2
C:\temp2\
C:\temp2
C:\temp2
C:\temp2
Хоча я впевнений, що для того, щоб пояснити, чому існує п'ять різних методів, які роблять практично таку саму річ, має бути якась причина , але я точно не знаю, що це таке. Тим не менш, здається, що за більшості обставин ви можете вибирати те, що вам здається.
ОНОВЛЕННЯ:
Я змінив властивості ярлика, змінивши поле "Почати в:" на C:\temp3
. Це призвело до наступного результату:
C:\temp2
C:\temp2\
C:\temp3
C:\temp3
C:\temp3
... що демонструє принаймні деякі відмінності між різними методами.