【问题标题】:How to get executing assembly location?如何获取执行装配位置?
【发布时间】:2023-03-22 03:30:01
【问题描述】:

我正在尝试使用相对路径从 ASP.Net vNext 类库访问文件。该文件(应该)位于应用程序的安装文件夹中,并且要构建完整路径,我需要获取该文件夹路径。

使用System.Reflection.Assembly.GetExecutingAssembly()Location 属性为空。 CodeBase 属性包含以下内容:

CodeBase = "file:///C:/Users/username/.dnx/runtimes/dnx-clr-win-x86.1.0.0-beta7/bin/Microsoft.Dnx.Loader.dll"

如何获取正在执行的文件所在的实际文件夹?

编辑: 正如我已经解释的那样,答案here 对 ASP.Net 5 无效。 - 仅用于重复标记。

【问题讨论】:

  • 试过使用 AppDomain.CurrentDomain.BaseDirectory;?
  • 不是重复的。正如我在问题中解释的那样,那里的答案对 ASP.Net 5 无效。我会在早上测试 JFM 的建议。
  • 您可能真的需要 Server.MapPath 函数后面的 ASP / IIS / ISAPI 函数。这些告诉您 IIS 在哪里运行,而不是 .NET 从哪里运行。细微的差别在于,Server 更像是 URL 与硬盘的关系,而 Reflection 更像是 .NET 与硬盘的关系。

标签: c# asp.net-core


【解决方案1】:

试试IApplicationEnvironment.ApplicationBasePath。您可以在 Startup 类中创建一个构造函数,将其作为参数,在那里获取值,然后将其提供给类库:

public Startup(IApplicationEnvironment env)
{
    _location = env.ApplicationBasePath;
}

或者,如果您通过 DI 获取需要该位置的类的实例,您可以在您的类库项目中添加“Microsoft.Dnx.Runtime.Abstractions”作为依赖项,并在该类上添加一个构造函数IApplicationEnvironment:

public MyClass(IApplicationEnvironment env)
{
    Location = env.ApplicationBasePath;
}

在静态类中尝试

ProjectRootResolver.ResolveRootDirectory(Directory.GetCurrentDirectory());

ProjectRootResolver 位于 Microsoft.Dnx.Runtime 命名空间中。

【讨论】:

  • 太棒了! :) 奇迹般有效。我之前有一个using Microsoft.Framework.Runtime 声明,但失败了。 using Microsoft.Dnx.Runtime 工作。
  • 知道如何在静态类中获取它吗?静态构造函数总是无参数的
  • @MoslemBenDhaou 请看我上面的编辑。希望对你有用。
  • 请注意:Directory.GetCurrentDirectory() 可以更改,例如通过调用 Directory.SetCurrentDirectory("C:\New\Current\Directory")。因此,如果您打算更改当前目录,请先保存它。
  • ProjectRootResolver.ResolveRootDirectory(Directory.GetCurrentDirectory());正是我想要的。非常感谢。
【解决方案2】:

AppDomain.CurrentDomain.BaseDirectory 可能对于访问位置相对于应用程序安装目录的文件最有用。

Best way to get application folder path查看更多信息

希望对你有帮助。

【讨论】:

  • 很遗憾没有。还是给`C:\Users\username\.dnx\runtimes\dnx-clr-win-x86.1.0.0-beta7\bin`。
  • AppDomain 在 .NET Core 中不存在
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-13
相关资源
最近更新 更多