Я использую следующие два метода, чтобы помочь с этим:
public static IEnumerable<DirectoryInfo> ParentDirs(this DirectoryInfo dir) {
while (dir != null) {
yield return dir;
dir = dir.Parent;
}
}
public static DirectoryInfo FindDataDir(string relpath, Assembly assembly) {
return new FileInfo((assembly).Location)
.Directory.ParentDirs()
.Select(dir => Path.Combine(dir.FullName + @"\", relpath))
.Where(Directory.Exists)
.Select(path => new DirectoryInfo(path))
.FirstOrDefault();
}
Причина, по которой нужно смотреть на родительские каталоги, чтобы их было легче использовать во время разработки, когда различные сценарии сборки в конечном итоге застревают в таких каталогах, как bin\x64\Release\NonsensePath\
.