【发布时间】:2010-10-26 06:07:56
【问题描述】:
如何获取当前程序集的路径?我需要从一些相对于当前程序集 (.dll) 位置的路径获取数据。
我以为有人告诉我使用反射命名空间,但我在其中找不到任何东西。
【问题讨论】:
-
Assembly.GetExecutingAssembly().Location
标签: .net vb.net visual-studio
如何获取当前程序集的路径?我需要从一些相对于当前程序集 (.dll) 位置的路径获取数据。
我以为有人告诉我使用反射命名空间,但我在其中找不到任何东西。
【问题讨论】:
标签: .net vb.net visual-studio
你可以使用:
string path = (new System.Uri(Assembly.GetExecutingAssembly().CodeBase)).AbsolutePath;
cmets 中的一些建议是通过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:
【讨论】:
.Location有什么好处/目的? (我怀疑一定是有原因的,但我想不通。)
System.Uri.UnescapeDataString 将百分比编码的文件路径转换回正常的文件路径。 Uri 构造函数将编码例如空格为“%20”,.NET 方法将按字面意思理解,这些方法需要传统的文件路径而不是 URI。
System.Reflection.Assembly.GetExecutingAssembly().Location
【讨论】:
只是为了说清楚:
Assembly.GetExecutingAssembly().Location
【讨论】:
我更喜欢
new System.Uri(Assembly.GetExecutingAssembly().EscapedCodeBase).LocalPath;
EscapedCodeBase 涵盖了您的本地路径中可能包含无效 URI 字符的情况(请参阅https://stackoverflow.com/a/21056435/852208)
LocalPath 包括本地路径和 unc 路径的完整路径,其中 AbsolutePath 修剪掉“\\server”
【讨论】: