如何获取类库上的当前目录?
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 的当前工作目录?