Alex Rivera | Logout

How do I get the path of the assembly the code is in?

Asked 2008-09-09T20:12:28.340
953

Is there a way to get the path for the assembly in which the current code resides? I do not want the path of the calling assembly, just the one containing the code.

Basically my unit test needs to read some xml test files which are located relative to the dll. I want the path to always resolve correctly regardless of whether the testing dll is run from TestDriven.NET, the MbUnit GUI or something else.

Edit: People seem to be misunderstanding what I'm asking.

My test library is located in say

C:\projects\myapplication\daotests\bin\Debug\daotests.dll

and I would like to get this path:

C:\projects\myapplication\daotests\bin\Debug\

The three suggestions so far fail me when I run from the MbUnit Gui:

  • Environment.CurrentDirectory gives c:\Program Files\MbUnit

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

  • System.Reflection.Assembly.GetExecutingAssembly().Location gives the same as the previous.

Edit
Report

1 Answer

79

Same as John's answer, but a slightly less verbose extension method.

public static string GetDirectoryPath(this Assembly assembly)
{
    string filePath = new Uri(assembly.CodeBase).LocalPath;
    return Path.GetDirectoryName(filePath);            
}

Now you can do:

var localDir = Assembly.GetExecutingAssembly().GetDirectoryPath();

or if you prefer:

var localDir = typeof(DaoTests).Assembly.GetDirectoryPath();
answered 2010-04-02T14:43:27.357

Your Answer