Обратите внимание, что как Environment.CurrentDirectory, так и Assembly.GetExecutingAssembly().Location (точнее, их каталог) семантически неправильны, хотя они часто - но не всегда - тот же каталог:
Текущий каталог является "рабочим каталогом" и может быть изменен в любой момент времени, например команда "cd" в оболочке.
Выполняющая сборка - это сборка, которая содержит код, который в настоящее время работает, и может быть или не быть в том же каталоге, что и фактическое приложение. Например, если ваше приложение "A.exe", которое имеет зависимость "B.dll", а некоторый код в B.dll вызывает Assembly.GetExecutingAssembly(), это приведет к "/path/to/B.dll".