获取当前程序集的path
我如何获得当前程序集的path? 我需要从某些path相对于当前程序集(.dll)的位置获取数据。
我以为有人告诉我使用reflection命名空间,但我找不到任何内容。
您可以使用:
string path = (new System.Uri(Assembly.GetExecutingAssembly().CodeBase)).AbsolutePath;
注释中的一些build议是通过System.Uri.UnescapeDataString
(来自vvnurmi )来传递,以确保处理任何百分比编码,并使用Path.GetFullpath
(来自TrueWill )来确保path是标准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] 未转义:[C:/ Temp / Temp App / bin / Debug / TempApp.EXE] 完整path:[C:\ Temp \ Temp App \ bin \ Debug \ TempApp.EXE]
System.Reflection.
Assembly
。 GetExecutingAssembly()
。 Location
只是要说清楚:
Assembly.GetExecutingAssembly().Location
我更喜欢
new System.Uri(Assembly.GetExecutingAssembly().EscapedCodeBase).LocalPath;
EscapedCodeBase涵盖了您的本地path中可能包含无效的URI字符的情况(请参阅https://stackoverflow.com/a/21056435/852208 )
LocalPath包含本地path和uncpath的完整path,其中AbsolutePath修剪掉“\\ server”