获取当前程序集的路径

时间:2009-05-14 16:52:39

标签: .net vb.net visual-studio

如何获取当前程序集的路径?我需要从某些路径获取相对于当前程序集(.dll)位置的数据。

我以为有人告诉我使用反射命名空间,但我找不到任何内容。

4 个答案:

答案 0 :(得分:74)

您可以使用:

string path = (new System.Uri(Assembly.GetExecutingAssembly().CodeBase)).AbsolutePath;

评论中的一些建议是通过System.Uri.UnescapeDataString (来自vvnurmi传递,以确保处理任何百分比编码,并使用{{1} } (来自TrueWill以确保路径采用标准Windows格式(而不是使用斜杠而不是反斜杠)。以下是每个阶段的结果示例:

Path.GetFullpath

如果我们正在运行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 + "]"); 输出

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]

答案 1 :(得分:45)

System.Reflection. AssemblyGetExecutingAssembly()Location

答案 2 :(得分:6)

只是说清楚:

Assembly.GetExecutingAssembly().Location

答案 3 :(得分:2)

我更喜欢

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

EscapedCodeBase涵盖了本地路径中可能包含无效URI字符的情况(请参阅https://stackoverflow.com/a/21056435/852208

LocalPath包括本地路径和unc路径的完整路径,其中AbsolutePath修剪掉“\\ server”