Подтвердить что ты не робот

Получение пути к текущей сборке

Как мне получить путь к текущей сборке? Мне нужно получить данные из некоторых путей относительно местоположения hte current assembly (.dll).

Я думал, что кто-то сказал мне использовать пространство имен отражений, но я ничего не могу найти там.

4b9b3361

Ответ 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]

Ответ 3

Просто, чтобы было ясно:

Assembly.GetExecutingAssembly().Location

Ответ 4

Я предпочитаю

new System.Uri(Assembly.GetExecutingAssembly().EscapedCodeBase).LocalPath;

EscapedCodeBase охватывает сценарий, в котором ваш локальный путь может иметь недопустимый URI char в нем (см. fooobar.com/info/22727/...)

LocalPath включает полный путь как для локальных путей, так и для непустых путей, где AbsolutePath отключает "\\ server"