正規化された絶対パスを取得するにはGetFullPathメソッドを使います。 このメソッドを呼び出すと、相対パスは解決された状態になり、正規化された絶対パス・ルートディレクトリを基準(あるいは基点、base)とするパスが返されます。 カレントドライブからの相対パス(\で始まるパス)の場合も、ドライブ名を含む絶対パスに正規化されます。

.NET Standard 2.1/.NET Core 2.1以降では引数basePathを指定することができ、このパスを基準として相対パスが解決されます。 basePathには実在しないパスを指定することもできます。

また、basePathは常にディレクトリを表すものとして扱われるため、basePathがディレクトリ区切り文字で終端されているかどうかによって結果が変わることはありません。 当然、basePathに相対パスを指定することはできません

Path.GetFullPathメソッドで特定のディレクトリを基準として絶対パスを取得・正規化する .NET Standard 2.1/.NET Core 2.1
using System;
using System.IO;
using System.Runtime.InteropServices;

class Sample {
  static void Main()
  {
    // 基準ディレクトリ(相対パスを絶対パスに変換する際の基準となるディレクトリ)
    var baseDir = RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
      ? @"C:\Users\user\"
      : "/home/user/";

    Console.WriteLine("base directory: {0}", baseDir);
    Console.WriteLine();

    foreach (var path in new[] {
      @"E:\dir\subdir\file.txt",    // 絶対パス (Windows形式)
      @"/dir/subdir/file.txt",      // 絶対パス (UNIX形式)
      @"E:\dir\subdir\.\file.txt",  // カレントディレクトリからの相対パスを含むパス (Windows形式)
      @"/dir/subdir/.\file.txt",    // カレントディレクトリからの相対パスを含むパス (UNIX形式)
      @"E:\dir\subdir\..\file.txt", // 親ディレクトリからの相対パスを含むパス (Windows形式)
      @"/dir/subdir/..\file.txt",   // 親ディレクトリからの相対パスを含むパス (UNIX形式)
      @"\dir\subdir\file.txt",      // カレントドライブからの相対パス (Windows形式)
      @".\file.txt",                // カレントディレクトリからの相対パス (Windows形式)
      @"./file.txt",                // カレントディレクトリからの相対パス (UNIX形式)
      @"..\file.txt",               // 親ディレクトリからの相対パス (Windows形式)
      @"../file.txt",               // 親ディレクトリからの相対パス (UNIX形式)
      @"file.txt",                  // ファイル名のみのパス
    }) {
      Console.WriteLine("path      = {0}", path);
      Console.WriteLine("full path = {0}", Path.GetFullPath(path, baseDir)); // baseDirを基準に正規化した絶対パスを取得する
      Console.WriteLine();
    }
  }
}
実行結果
base directory: C:\Users\user\

path      = E:\dir\subdir\file.txt
full path = E:\dir\subdir\file.txt

path      = /dir/subdir/file.txt
full path = C:\dir\subdir\file.txt

path      = E:\dir\subdir\.\file.txt
full path = E:\dir\subdir\file.txt

path      = /dir/subdir/.\file.txt
full path = C:\dir\subdir\file.txt

path      = E:\dir\subdir\..\file.txt
full path = E:\dir\file.txt

path      = /dir/subdir/..\file.txt
full path = C:\dir\file.txt

path      = \dir\subdir\file.txt
full path = C:\dir\subdir\file.txt

path      = .\file.txt
full path = C:\Users\user\file.txt

path      = ./file.txt
full path = C:\Users\user\file.txt

path      = ..\file.txt
full path = C:\Users\file.txt

path      = ../file.txt
full path = C:\Users\file.txt

path      = file.txt
full path = C:\Users\user\file.txt

実行結果
base directory: /home/user/

path      = E:\dir\subdir\file.txt
full path = /home/user/E:\dir\subdir\file.txt

path      = /dir/subdir/file.txt
full path = /dir/subdir/file.txt

path      = E:\dir\subdir\.\file.txt
full path = /home/user/E:\dir\subdir\.\file.txt

path      = /dir/subdir/.\file.txt
full path = /dir/subdir/.\file.txt

path      = E:\dir\subdir\..\file.txt
full path = /home/user/E:\dir\subdir\..\file.txt

path      = /dir/subdir/..\file.txt
full path = /dir/subdir/..\file.txt

path      = \dir\subdir\file.txt
full path = /home/user/\dir\subdir\file.txt

path      = .\file.txt
full path = /home/user/.\file.txt

path      = ./file.txt
full path = /home/user/file.txt

path      = ..\file.txt
full path = /home/user/..\file.txt

path      = ../file.txt
full path = /home/file.txt

path      = file.txt
full path = /home/user/file.txt

引数basePathを指定しないバージョンのGetFullPathメソッドを呼び出した場合、相対パスは常にカレントディレクトリを基準として解決されます。

Path.GetRelativePathメソッドを使うことで相対パスを取得することができます。

カレントディレクトリの取得・設定についてはプロセス・アセンブリの情報 §.カレントディレクトリを参照してください。