【问题标题】:Getting the path of the current assembly获取当前程序集的路径
【发布时间】:2010-10-26 06:07:56
【问题描述】:

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

我以为有人告诉我使用反射命名空间,但我在其中找不到任何东西。

【问题讨论】:

  • Assembly.GetExecutingAssembly().Location

标签: .net vb.net visual-studio


【解决方案1】:

你可以使用:

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:

代码库:[file:///C:/Temp/Temp App/bin/Debug/TempApp.EXE] 绝对路径:[C:/Temp/Temp%20App/bin/Debug/TempApp.EXE] 未转义:[C:/Temp/Temp App/bin/Debug/TempApp.EXE] 完整路径:[C:\Temp\Temp App\bin\Debug\TempApp.EXE]

【讨论】:

  • 我建议调用 Path.GetFullPath 将正斜杠转换为反斜杠。使用正斜杠时,您可能会从 Assembly.LoadFile 中得到奇怪的行为(例如类型不相等)。
  • 用这个代替.Location有什么好处/目的? (我怀疑一定是有原因的,但我想不通。)
  • @pst:根据环境,位置可能不正确,因为卷影复制可以在执行之前“移动”程序集。
  • @Marijn 这就是问题所在 - 这是影子复制后的位置。通常,您希望在加载之前获得实际文件的位置,上面为您提供...
  • 调用System.Uri.UnescapeDataString 将百分比编码的文件路径转换回正常的文件路径。 Uri 构造函数将编码例如空格为“%20”,.NET 方法将按字面意思理解,这些方法需要传统的文件路径而不是 URI。
【解决方案2】:

【讨论】:

  • 当从 MSTest 单元测试调用时,这给出了 mscorlib 的位置,而不是您的程序集。
【解决方案3】:

只是为了说清楚:

Assembly.GetExecutingAssembly().Location

【讨论】:

    【解决方案4】:

    我更喜欢

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 1970-01-01
      • 2010-12-02
      • 2012-11-26
      相关资源
      最近更新 更多