Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.

like image 842
George Mauer Avatar asked Sep 09 '08 20:09

George Mauer


People also ask

What is assembly GetExecutingAssembly ()?

Assembly property to get the currently executing assembly based on a type contained in that assembly. It also calls the GetExecutingAssembly method to show that it returns an Assembly object that represents the same assembly.

What is the method to load assembly by name?

Loads an assembly given its AssemblyName. The assembly is loaded into the domain of the caller using the supplied evidence. Loads the assembly with a common object file format (COFF)-based image containing an emitted assembly. The assembly is loaded into the application domain of the caller.

What is System reflection assembly?

Namespace: System.Reflection. Summary. Defines an Assembly, which is a reusable, versionable, and self-describing building block of a common language runtime application.


1 Answers

I've defined the following property as we use this often in unit testing.

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);     } } 

The Assembly.Location property sometimes gives you some funny results when using NUnit (where assemblies run from a temporary folder), so I prefer to use CodeBase which gives you the path in URI format, then UriBuild.UnescapeDataString removes the File:// at the beginning, and GetDirectoryName changes it to the normal windows format.

like image 72
John Sibly Avatar answered Oct 07 '22 21:10

John Sibly