我如何获得代码所在的程序集路径?

有没有办法获得当前代码所在的程序集的路径? 我不想要调用程序集的路径,只是包含代码的路径。

基本上我的单元测试需要读取一些相对于dll的xml测试文件。 无论测试dll是从TestDriven.NET,MbUnit GUI还是其他东西运行,我都希望路径始终正确解析。

编辑 :人们似乎误解了我的要求。

我的测试库位于说

C:项目 MyApplication的 daotests BIN 调试 daotests.dll

我想获得这个路径:

C:项目 MyApplication的 daotests BIN 调试

当我从MbUnit Gui运行时,到目前为止的三个建议都失败了:

  • Environment.CurrentDirectory提供了c: Program Files MbUnit

  • System.Reflection.Assembly.GetAssembly(typeof(DaoTests)).Location给出C: Documents and Settings george Local Settings Temp .... DaoTests.dll

  • System.Reflection.Assembly.GetExecutingAssembly().Location与前一个相同。


  • 我已经定义了以下属性,因为我们经常在单元测试中使用它。

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

    当使用NUnit(其中程序集从临时文件夹运行)时, Assembly.Location属性有时会给你一些有趣的结果,所以我更喜欢使用以URI格式给出路径的CodeBase ,然后UriBuild.UnescapeDataString删除File:// at开始,并GetDirectoryName将其更改为正常的Windows格式。


    这有帮助吗?

    //get the full location of the assembly with DaoTests in it
    string fullPath = System.Reflection.Assembly.GetAssembly(typeof(DaoTests)).Location;
    
    //get the folder that's in
    string theDirectory = Path.GetDirectoryName( fullPath );
    

    这很简单:

    var dir = AppDomain.CurrentDomain.BaseDirectory;
    
    链接地址: http://www.djcxy.com/p/3573.html

    上一篇: How do I get the path of the assembly the code is in?

    下一篇: Reading settings from app.config or web.config in .net