Почему apps2 остаётся пустым?
IEnumerable<AppFile> apps2 = Enumerable.Empty<AppFile>();
var a2 = new AppFile();
a2.Name = Path.GetFileNameWithoutExtension(@"c:\ConsoleApp1.exe");
a2.Path = GetTargetPath(@"c:\ConsoleApp1.exe");
apps2 = Enumerable.Empty<AppFile>();
var af2 = new List<AppFile>() { a2 }; //здесь af2 не пустой
apps2.Concat(af2);
Concat возвращает новую последовательность, а не изменяет прежнюю (как и все операции Linq), поэтому вам необходимо явно сохранить результат:
apps2 = apps2.Concat(af2);
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники