如何获取类库上的当前目录?

Posted

技术标签:

【中文标题】如何获取类库上的当前目录?【英文标题】:How to get the current directory on a class library? 【发布时间】:2010-10-21 03:58:13 【问题描述】:

我一直在寻找,但我没有找到解决这个问题的方法:我想创建一个类库,该类库在名为 Configuration 的子目录下有一个配置文件。我希望该类库可以部署在任何地方,并且我希望它通过知道自己的位置来找到它的配置文件。

以前使用 Assembly.GetExecutingAssembly().Location 的尝试无效。 它将返回临时位置,例如

C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\7c00e0a3\38789d63\assembly\dl3\9c0a23ff\18fb5feb_6ac3c901

而不是想要的

bin/Configuration 路径。

所以:

    类库可以知道它自己在磁盘上的位置吗? 我将如何着手编写此功能的测试脚本,因为目录似乎会根据您运行应用程序的方式而变化(在 VS 中调试、在 IIS 上部署等)

【问题讨论】:

为什么不在应用程序的 app.config 文件中包含配置并在类库中使用 ConfigurationManager? 您可能想澄清您的问题(以便以后更好地搜索)这是 ASP.NET。对于桌面应用程序,GetExecutingAssembly() 工作得很好。 @Justin:我希望类库独立于调用者应用程序。 @Stu:两者都有。我想创建一个可用于控制台应用程序和 Web 应用程序的类库。类库不应该关心谁在调用它。 【参考方案1】:

这应该可以 -

string assemblyFile = (
    new System.Uri(Assembly.GetExecutingAssembly().CodeBase)
).AbsolutePath;

【讨论】:

would: System.Reflection.Assembly.GetExecutingAssembly ().Location 不会提供相同的信息...? @dba 在有卷影复制时不会。例如,在单元测试中尝试它会出错【参考方案2】:

下面的代码可以帮助我获取 Images 文件夹类库文件的物理路径。

string fullFilePath = Path.Combine((new System.Uri(Assembly.GetExecutingAssembly().CodeBase)).AbsolutePath.Split(new string[]  "/bin" , StringSplitOptions.None)[0]
                          , "@/Images/test.png");

希望对大家有所帮助。

【讨论】:

我认为这个对我有用,所以谢谢@RajeevKumar【参考方案3】:

老问题,但为新观众回答。 只需访问该文件。我通过动态设置目录尝试了多种方法,但没有积极的结果。 但另一方面,我看到它会自动访问其目录/子目录中的文件,而无需显式调用任何方法来获取当前目录。

[我的情况] 我必须访问与类库一起存储的配置文件,我可以直接访问它而无需指定或设置地址。

【讨论】:

以上是关于如何获取类库上的当前目录?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 Grails/Tomcat Webapp 的当前工作目录?

VB如何获取当前目录的上级目录名?

如何获取当前用户目录?

如何在 Java 中获取当前工作目录?

如何获取 Xcode Playground 的当前工作目录?

如何获取 Qt 应用程序的当前工作目录路径?