如何获取当前程序集的路径?我需要获取与当前程序集(.dll)位置相关的一些路径数据。
我曾经听说要使用反射命名空间,但是在那里我找不到任何东西。
如何获取当前程序集的路径?我需要获取与当前程序集(.dll)位置相关的一些路径数据。
我曾经听说要使用反射命名空间,但是在那里我找不到任何东西。
你可以使用:
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]
.Location
,使用这个有什么优势/目的?(我猜想一定有原因,但是我不明白。) - user166390System.Uri.UnescapeDataString
方法将百分号编码的文件路径转换成普通文件路径。 Uri构造函数会将例如空格编码为“%20”,这将被.NET方法字面理解为传统文件路径而不是URI。 - vvnurmiSystem.Reflection.
Assembly
.GetExecutingAssembly()
.Location
为了明确起见:
Assembly.GetExecutingAssembly().Location
I prefer
new System.Uri(Assembly.GetExecutingAssembly().EscapedCodeBase).LocalPath;
EscapedCodeBase涵盖了您的本地路径可能包含无效URI字符的情况(请参见https://dev59.com/9EfRa4cB1Zd3GeqP_LDB#21056435)
LocalPath包括本地路径和UNC路径的完整路径,而AbsolutePath则修剪掉“\ \ server”