428 votos

¿Cómo obtengo el camino de la Asamblea en el código?

Hay una manera de obtener la ruta de acceso para la asamblea en la que el actual código reside? No quiero que la ruta de acceso de la convocatoria de la asamblea, sólo el que contiene el código.

Básicamente mi unidad de prueba de necesidades para leer algunos de los xml de los archivos de prueba que se encuentra con respecto a la dll. Quiero que el camino siempre se resuelven correctamente independientemente de si la prueba dll se ejecuta desde TestDriven.NET el MbUnit GUI o algo más.

Edit: parece que la Gente se malentendido de lo que te estoy preguntando.

Mi prueba de biblioteca se encuentra en decir

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

y me gustaría conseguir esta ruta:

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

Las tres sugerencias, así que ahora me falla cuando ejecuto desde el MbUnit Gui:

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

  • System.Reflection.Assembly.GetAssembly(typeof(DaoTests)).Location da C:\Documents y Settings\jorge\Local Settings\Temp\ ....\DaoTests.dll

  • System.Reflection.Assembly.GetExecutingAssembly().Location da igual que la anterior.

598voto

John Sibly Puntos 9805

Yo he definido la siguiente propiedad como usar esto a menudo de pruebas unitarias.

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

El Assembly.Location propiedad a veces le da algunos graciosos resultados al utilizar NUnit (donde las asambleas ejecutar desde una carpeta temporal), así que prefiero utilizar CodeBase que te da la ruta en formato URI, entonces UriBuild.UnescapeDataString elimina el File:// al principio, y GetDirectoryName cambia al formato normal de windows.

223voto

Keith Puntos 46288

¿Ayuda esto?

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

203voto

Jalal El-Shaer Puntos 6027

Es tan simple como esto:

var dir = AppDomain.CurrentDomain.BaseDirectory;

46voto

Sneal Puntos 1088

Igual respuesta de John, pero un método de extensión ligeramente menos detallado.

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

26voto

jodonnell Puntos 14999

Esto debería funcionar:

 string path = System.Reflection.Assembly.GetExecutingAssembly().Location
 

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X