Как можно с минимальными усилиями (используя какое-то уже существующее средство, если это возможно) конвертировать пути типа c:\aaa\bbb\..\ccc в c:\aaa\ccc?
Как можно получить абсолютный или нормализованный путь к файлу в .NET?
Ответ 1
 Path.GetFullPath возможно?
Ответ 2
Я бы написал это следующим образом:
public static string NormalizePath(string path)
{
    return Path.GetFullPath(new Uri(path).LocalPath)
               .TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar)
               .ToUpperInvariant();
}
Это должно обрабатывать несколько сценариев, таких как
-  
uri и потенциально экранированные символы, например
file:///C:/Test%20Project.exe → C:\TEST PROJECT.EXE
 -  
сегменты пути, заданные точками, для обозначения текущего или родительского каталога
c:\aaa\bbb \..\ccc → C:\AAA\CCC
 -  
укороченные (длинные) дорожки тильды
C:\Progra ~ 1\- > C:\PROGRAM FILES
 -  
несогласованный символ разделителя каталогов
C:/Documents\abc.txt → C:\DOCUMENTS\ABC.TXT
 
Кроме этого, он может игнорировать регистр, обращаясь к символу разделителя \ и т.д.
Ответ 3
Canonicalization является одной из основных обязанностей класса Uri в .NET.
var path = @"c:\aaa\bbb\..\ccc";
var canonicalPath = new Uri(path).LocalPath; // c:\aaa\ccc