当前位置:  开发笔记 > Android > 正文

获取程序集执行目录的最佳方法是什么

如何解决《获取程序集执行目录的最佳方法是什么》经验,为你挑选了4个好方法。

对于我的应用程序,我将一些配置文件与程序集(exe)一起存储在xml中,还有一些其他临时文件用于处理目的.

".\\"和他发现了一些怪癖Application.StartupPath.

我一直在用

String configPath = ".\\config.xml";

它工作正常,直到我打电话OpenFIleDialog打开其他文件夹中的某些文件,上面的语句失败.显然".\"指的是"CurrentDirectory",每当我们浏览到另一个文件夹时它就会改变.

在某些时候,我正在使用

String configPath = Path.Combine(Application.StartupPath + "config.xml");

在某些时候,当我需要通过使用从另一个文件夹执行此程序集时Process.Start(),事情开始崩溃.显然工作目录设置不正确,Application.StartupPath实际上是指工作目录而不是正在执行程序集的目录,正如我所假设的那样.所以我不得不求助于使用ProcessInfo将工作目录设置到程序集的目录中.当我写VSTO时,我也有这个问题.

所以,我的问题是,什么是获得程序集正在执行的当前目录的最好,最简单和最有保证的方法,没有我刚刚提到的那些怪癖(或误解)?

编辑:我的意思是获取程序集所在的目录

编辑:根据MSDN上AppDomain.BaseDirectory,它似乎可以运行,这是我不想要的东西(我想弄清楚,不是我不想允许更改BaseDirectory,而是,当在改变我检索它而不确定它是否已被更改)

编辑:我注意到一个相关的问题早就发布了.什么会导致正在执行的应用程序的当前目录发生变化?

谢谢你的回答.



1> korro..:
System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location))


是的...只做一次这样的调用,看它吸收你所有的CPU周期并将你的Xeon Octa-core变成HP12c.因为任何人都知道反思是产生撒旦 - 并且代表 - 所有这一切都是真正的邪恶世界(斯科特汉塞尔曼的名字:)

2> John Sibly..:

尝试下面的实现.CodeBase属性是获取位置的最可靠方式,然后其余代码将其转换为标准Windows格式(而不是URI).

static public string AssemblyLoadDirectory
{
    get
    {
        string codeBase = Assembly.GetCallingAssembly().CodeBase;
        UriBuilder uri = new UriBuilder(codeBase);
        string path = Uri.UnescapeDataString(uri.Path);
        return Path.GetDirectoryName(path);
    }
}



3> Jon Skeet..:

您想要实际的工作目录,还是包含程序集的目录?这还不完全清楚.

还有Environment.CurrentDirectory,如果你想在工作目录,或Path.GetDirectoryName(typeof(Foo).Assembly.ManifestModule.FullyQualifiedName)找到一个程序集的位置(或者至少其清单模块,这将是在几乎所有情况下,同样的事情).



4> tafa..:

还有,

System.Reflection.Assembly.GetExecutingAssembly().CodeBase

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有