Ответ 1
Вы можете использовать:
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]