Все они дают одинаковый результат - расположение папки, в которой выполняется exe, который выполняется. Я уверен, что нет хороших или плохих методов в .net BCL. Все они подходят в особых обстоятельствах. Какой из них подходит для какого сценария?
var appBaseDir = AppDomain.CurrentDomain.BaseDirectory;
var currentDir = Environment.CurrentDirectory;
var dir = Directory.GetCurrentDirectory();
var path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);