Вы можете использовать:
string path = (new System.Uri(Assembly.GetExecutingAssembly().CodeBase)).AbsolutePath;
Некоторые предложения в комментариях, чтобы передать, что через System.Uri.UnescapeDataString
(от vvnurmi) чтобы гарантировать, что любой процент кодирования обрабатывается, и использовать Path.GetFullpath
(от TrueWill), чтобы гарантировать, что путь находится в стандартной форме Windows (вместо того, чтобы иметь косые черты вместо обратных косых черт). Вот пример того, что вы получите на каждом этапе:
string s = Assembly.GetExecutingAssembly().CodeBase;
Console.WriteLine("CodeBase: [" + s + "]");
s = (new Uri(s)).AbsolutePath;
Console.WriteLine("AbsolutePath: [" + s + "]");
s = Uri.UnescapeDataString(s);
Console.WriteLine("Unescaped: [" + s + "]");
s = Path.GetFullPath(s);
Console.WriteLine("FullPath: [" + s + "]");
выход, если мы бежим C:\Temp\Temp App\bin\Debug\TempApp.EXE
:
CodeBase: [file:///C:/Temp/Temp App/bin/Debug/TempApp.EXE]
AbsolutePath: [C:/Temp/Temp%20App/bin/Debug/TempApp.EXE]
Unescaped: [C:/Temp/Temp App/bin/Debug/TempApp.EXE]
FullPath: [C:\Temp\Temp App\bin\Debug\TempApp.EXE]
Assembly.GetExecutingAssembly(). Location – RichieHindle